MySQL-区域查询时普通索引与主键索引查询效率上差异的原因是什么?

发布于 2016-12-03 16:34:09 字数 158 浏览 1769 评论 3

背景:有些数据需要删除或者查询根据时间等条件,这些条件都是普通索引
操作:1)现根据这些条件查询出主键id,再根据id去锁定查询或者删除范围
2)直接根据这些条件锁定查询或者删除范围
问题:这样操作的话对删除和查询快慢造成影响的原因是什么,可以从原理上说明下么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

想挽留 2017-08-20 10:29:36

2的速度肯定比1的速度快,先不说他们的原理,就单纯的说需要从php和mysql信息传递上说,1就和2差多了,2完全是mysql内部进行。

其次,mysql通过索引找到的也是主键的值,然后基于该值进行查询。因为索引其实就是将主键和索引牵涉到字段单独建立一个结构,用来排除索引无关的字段对只查询索引字段条件的影响。

可以看看下面的资料
由浅入深探究mysql索引结构原理、性能分析与优化

浮生未歇 2017-07-25 10:23:04

不用mySql,但我这么觉得,当前数据库的瓶颈就是IO,占用的时间也最多,用第一种方式,先查再删是不是人工多增加了IO的工作量?可以尝试一下看看执行计划

清晨说ぺ晚安 2017-06-26 12:49:26

这个普通索引的范围太大了,最好详细点。B树还是heap?engine是什么?
我猜是innodb吧,那么用的是B树,那么普通索引指的就是非聚簇索引,主键索引就是聚簇索引。非聚簇索引的叶子节点存的是索引值和对应的主键值,换句话说,要用非聚簇索引定位数据需要先根据索引值定位主键值,然后再到聚簇索引中寻找数据行。
如果你的查询可以使用覆盖索引,那就不需要再到聚簇索引中去找了,非聚簇就直接搞定了。desc一下看看extra中有没有 using index就知道了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文