我是靠谱客的博主 内向身影,最近开发中收集的这篇文章主要介绍MySQL时间查询不走索引_查询在什么时候不走索引,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

查询在什么时候不走索引

参考回答

主要三种情况

1 >

不满足走索引的条件, 常见的情况有

1.

1 >

不满足最左匹配原则

1.

2 >

查询条件使用了函数

1.

3>

or 操作有一个字段没有索引

1.

4 >

使用 like 条件以 % 开头

2 >

走索引效率低于全表扫描, 常见的情况有

2.

1 >

查询条件对 null 做判断, 而 null 的值很多

2.

2 >

一个字段区分度很小, 比如性别, 状态

3 >

需要回表的查询结果集过大, 超过了配置的范围

实际运用

使用索引是为了对查询做优化, 要衡量优化效果需要数据说话.

所以需要一些工具来衡量, 常用的有:

1 >

慢查询日志

开启慢查询日志, 可以针对慢 SQL 进行分析看看哪些可以用索引进行优化

2>

show processlist

show processlist 语句可以查看当前正在执行的 SQL, 如果一些 SQL 执行慢, block 了其他的 SQL, 这是个很好的工具

ec2705652f90137476827866a23a2e6d.png

82acf18ed88eba89b10916dc894bd366.png

3>

show profile 分析 SQL

使用这个工具可以分析出时间究竟耗费在哪个阶段.

先查询是否支持

2cc18812d60ced287f2171d670f8bd47.png

支持的话, 可以用 select @@profiling 查看是否开启, 如果结果为 0 说明未开启.

需要先 set @@profiling=1;

这时候就可以用 show profiles 查看每一条 SQL 语句耗费的时间

831520082e618c6383ecb880cfdfdf50.png

show profile for query XXID 可以查看具体耗费在哪个阶段

4>

Trace 分析优化器的执行计划

使用 set optimizer_trace='enabled=on',end_markers_in_json=on;

可以打开 trace 分析, 想查看具体的优化器执行计划, 只要执行

select * from `information_schema`.

optimizer_trace 即可

8501ef4fc37f7c1c5fbc14cccab38c82.png

点击开每一步都有很详细的分析

总结

知识只要学透了都可以灵活运用.

在运用的时候要注意衡量效果.

一个常见的误区是开发人员无脑的在 MySQL 上层加缓存, 用来提高效率.

但是缓存只适用于读多写少的情况, 比如在金融交易系统, 数据读写比例 1:1.

数据总是查询出来下一刻就被更新了, 这时候用缓存反而加重系统的负担和复杂性.

这时候, 我们可以先利用工具查询数据库的读写比例.

比如 show global status like 'Com_______' 这个 SQL 可以查看 select,update,insert,delete 都被执行了多少次.

8626a601223c324e1626bac2eb0790b6.png

或者 show global status like 'Innodb_row_%' 除了查看 Innodb 的读写情况, 还可以查看锁的情况.

784054a8d95f46eaca9ef2fb5e8f6c27.png

思考

最后

以上就是内向身影为你收集整理的MySQL时间查询不走索引_查询在什么时候不走索引的全部内容,希望文章能够帮你解决MySQL时间查询不走索引_查询在什么时候不走索引所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部