ITPub博客

首页 > IT职业 > IT职场 > 查询在什么时候不走索引

查询在什么时候不走索引

IT职场 作者:shenmingmingDBA 时间:2020-07-09 10:42:58 0 删除 编辑

查询在什么时候不走索引

参考回答

主要三种情况

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 的读写情况, 还可以查看锁的情况.

思考


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30166976/viewspace-2703406/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-17

  • 博文量
    56
  • 访问量
    131847