概述
查询在什么时候不走索引
参考回答
主要三种情况
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, 这是个很好的工具
3>
show profile 分析 SQL
使用这个工具可以分析出时间究竟耗费在哪个阶段.
先查询是否支持
支持的话, 可以用 select @@profiling 查看是否开启, 如果结果为 0 说明未开启.
需要先 set @@profiling=1;
这时候就可以用 show profiles 查看每一条 SQL 语句耗费的时间
show profile for query XXID 可以查看具体耗费在哪个阶段
4>
Trace 分析优化器的执行计划
使用 set optimizer_trace='enabled=on',end_markers_in_json=on;
可以打开 trace 分析, 想查看具体的优化器执行计划, 只要执行
select * from `information_schema`.
optimizer_trace 即可
点击开每一步都有很详细的分析
总结
知识只要学透了都可以灵活运用.
在运用的时候要注意衡量效果.
一个常见的误区是开发人员无脑的在 MySQL 上层加缓存, 用来提高效率.
但是缓存只适用于读多写少的情况, 比如在金融交易系统, 数据读写比例 1:1.
数据总是查询出来下一刻就被更新了, 这时候用缓存反而加重系统的负担和复杂性.
这时候, 我们可以先利用工具查询数据库的读写比例.
比如 show global status like 'Com_______' 这个 SQL 可以查看 select,update,insert,delete 都被执行了多少次.
或者 show global status like 'Innodb_row_%' 除了查看 Innodb 的读写情况, 还可以查看锁的情况.
思考
最后
以上就是内向身影为你收集整理的MySQL时间查询不走索引_查询在什么时候不走索引的全部内容,希望文章能够帮你解决MySQL时间查询不走索引_查询在什么时候不走索引所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复