怎么比较两个索引的好坏?
典型回答 我们都知道,想要看一个 SQL 有没有用到索引,可以通过执行计划来看,并且 MySQL 的索引选择是优化器根据成本预估进行的。也就是说,其实是有可能优化器最终选错索引的。 那么,我们自己在做分析的时候,如何去评判一条 SQL 用到的索引是好是坏呢?如果一个 SQL 可以用到多个索引,那到底应该用哪个更合适呢? ✅为什么MySQL会选错索引,如何解决? 根据上面这篇文章中,我们可以知道,优化器评判一个索引的好坏的依据就是成本,成本低的索引就是好的,成本高的索引就是不好的。 假如说有以下 SQL: 1 EXPLAIN SELECT * FROM orders WHERE customer_name = "Hollis" and age = 12; 在不考虑索引合并的情况下,他可能会用到customer_name的索引,也可能会用到age的索引。那么,当我们分析两个索引的好坏的时候,有两种非常直观的方式: 1、直接运行一下 SQL,看看他的执行时长 2、通过执行计划分析 运行时长 第一种方式最直接,就是使用指定的索引直接运行一下 SQL,看看他的整体耗时就行了。如: 1 SELECT * FROM orders FORCE INDEX (customer_name) WHERE customer_name = 'Hollis' AND age = 12; 1 SELECT * FROM orders FORCE INDEX (age) WHERE customer_name = 'Hollis' AND age = 12; 这里使用 force index进行指定索引。如果是 MySQL 8.0之前,可以用SHOW PROFILES、如果是 MySQL 8.0之后的版本,可以用EXPLAIN ANALYZE来查看 SQL 的耗时情况。具体参考: ...