mysql查看索引使用

哈,想了解MySQL索引如何使用吗?好吧,让我告诉你。
这些方法我都尝试过,也有陷阱和经验。

上周有客户问我为什么添加索引后查询仍然很慢。
我直接用EXPLAIN给他看。
看看这个图表: sql EXPLAIN SELECT FROM order WHERE customer_id = 1 2 3 4 5 ;
查看结果中的类型字段。
如果是ALL,则表示全表扫描,不应该使用索引。
上次在上海的一个商场做活动数据库的时候,有一个SQL因为忘记添加索引而烧毁了服务器的CPU。
最后,我将类型从 ALL 更改为 string 来修复它。
是否还有另一个关键字段为 NULL?这意味着该索引根本没有被使用,需要快速更改。

但是仅仅看 EXPLAIN 是不够的。
有时覆盖指数没有被很好地使用。
例如这个: sql EXPLAIN SELECT order_id FROMorders WHERE order_date = '2 02 3 -1 2 -2 5 ';
结果中增加了IndexUsage,说明是覆盖索引,可以直接从索引中取出数据。
上次调试杭州的一个电商系统,发现将非主键索引设置为覆盖索引,查询速度提高了6 0%,因为我们不需要再回表查主键。

深入来说,如果理解了PerformanceSchema,价值就会增加。
我是在深圳的一个项目中才熟练掌握这一点的。
观看直播: sql SELECT FROM Performance_schema.index_usage WHERE OBJECT_SCHEMA = 'your_db';
这个 COUNT_FETCH 特别重要。
上次帮北京一家公司调的时候,发现一个索引读了好几遍就停了。
检查后发现统计表数据量太大,速度变慢。
只要调整一下buffer就可以了。

如果公司有钱,就用 Percona Toolkit 的 pt-index-usage 吧。
我去年在成都用过。
在分析慢查询日志时非常准确。
不要忘记带上输入参数: 在一起 pt-index-usage --user=root --password=yourpass --host=1 2 7 .0.0.1 Slow_query.log
输出结果中未使用的索引行是关注的焦点。
上次我帮客户删除了3 个完全无用的索引,查询时间直接减半。

给你一个提示,从EXPLAIN和SHOW INDEX开始练习,这两个是最直接的。
等到您熟悉后再使用性能图表。
如果资金最终到位,先进的工具肯定是必须的。
但说实话,最重要的是看业务场景。
有时候索引过多会导致速度变慢,所以需要具体问题具体分析。
无论如何,这取决于你。

mysql怎么查看索引