MySQL-区域查询时普通索引与主键索引查询效率上差异的原因是什么?
背景:有些数据需要删除或者查询根据时间等条件,这些条件都是普通索引
操作:1)现根据这些条件查询出主键id,再根据id去锁定查询或者删除范围
2)直接根据这些条件锁定查询或者删除范围
问题:这样操作的话对删除和查询快慢造成影响的原因是什么,可以从原理上说明下么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
2的速度肯定比1的速度快,先不说他们的原理,就单纯的说需要从php和mysql信息传递上说,1就和2差多了,2完全是mysql内部进行。
其次,mysql通过索引找到的也是主键的值,然后基于该值进行查询。因为索引其实就是将主键和索引牵涉到字段单独建立一个结构,用来排除索引无关的字段对只查询索引字段条件的影响。
可以看看下面的资料
由浅入深探究mysql索引结构原理、性能分析与优化
不用mySql,但我这么觉得,当前数据库的瓶颈就是IO,占用的时间也最多,用第一种方式,先查再删是不是人工多增加了IO的工作量?可以尝试一下看看执行计划
这个普通索引的范围太大了,最好详细点。B树还是heap?engine是什么?
我猜是innodb吧,那么用的是B树,那么普通索引指的就是非聚簇索引,主键索引就是聚簇索引。非聚簇索引的叶子节点存的是索引值和对应的主键值,换句话说,要用非聚簇索引定位数据需要先根据索引值定位主键值,然后再到聚簇索引中寻找数据行。
如果你的查询可以使用覆盖索引,那就不需要再到聚簇索引中去找了,非聚簇就直接搞定了。desc一下看看extra中有没有 using index就知道了。