select id,c2 from simple_table where date(c2) = '2022-01-01';
与第一个不同的是,这个 SQL 只返回了一些列,而这些列都在索引中。然后我们分析这条SQL的执行计划,判断是否可以通过索引:
在上图中,可以清楚的看到键值就是索引。
这里很奇怪,不是说对条件字段的函数操作会使索引失效,为什么索引又没了?
这是我在学习时遇到的问题,后来发现是因为没有搞清楚“走指数”是什么意思。大家都知道索引可以加速查询,但是你知道为什么索引可以加速查询吗?答案是减少查询次数。
现在我们回到上面的SQL,可以看到虽然key值是,但是rows值是1000。也就是scan扫描全表,也就是所有记录。但是因为所有需要查询的列都已经包含了,所以优化器选择走这个索引。
最后我们想一个问题,使用索引就一定要快吗?我们通过一个具体的例子来看看这个问题:
select * from simple_table;
select * from simple_table where id > 0;
可以看到,第一条 SQL 没有经过分析直接肉眼观察没有索引,第二条 SQL 使用了主键索引。可以看出不使用索引的速度更快,因为虽然使用了索引,但是从主键索引最左边的叶子节点开始向右扫描整个索引树,进行全表扫描,这使得索引毫无意义。.
综上所述:查询是否使用索引仅表示SQL语句的执行过程;而是否是慢查询是由它的执行时间决定的,也就是说,是否使用索引是慢查询。接触。我们在使用索引的时候,不仅要关注它是否有效,还要关注索引是否减少了查询扫描的数据行数,从而提高了扫描行的效率。对于大表,不仅要创建索引,还要考虑索引的可过滤性。如果过滤性好,执行速度会更快。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容