From 7ea0b680119e6ca64f47aa759c876901ea95dd7e Mon Sep 17 00:00:00 2001 From: Guide Date: Tue, 10 Oct 2023 11:04:04 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]=E5=AE=8C=E5=96=84=E7=B4=A2?= =?UTF-8?q?=E5=BC=95=E5=A4=B1=E6=95=88=E5=9C=BA=E6=99=AF=E7=9A=84=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/database/mysql/mysql-index.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/database/mysql/mysql-index.md b/docs/database/mysql/mysql-index.md index 51f4aa41..4c3b9a1c 100644 --- a/docs/database/mysql/mysql-index.md +++ b/docs/database/mysql/mysql-index.md @@ -396,12 +396,15 @@ ALTER TABLE `cus_order` ADD INDEX id_score_name(score, name); 索引失效也是慢查询的主要原因之一,常见的导致索引失效的情况有下面这些: - ~~使用 `SELECT *` 进行查询;~~ `SELECT *` 不会直接导致索引失效(如果不走索引大概率是因为 where 查询范围过大导致的),但它可能会带来一些其他的性能问题比如造成网络传输和数据处理的浪费、无法使用索引覆盖; -- 创建了组合索引,但查询条件未遵守最左匹配原则; +- 创建了组合索引,但查询条件未准守最左匹配原则; - 在索引列上进行计算、函数、类型转换等操作; -- 以 `%` 开头的 LIKE 查询比如 `like '%abc'`; -- 查询条件中使用 or,且 or 的前后条件中有一个列没有索引,涉及的索引都不会被使用到; -- 发生[隐式转换](./index-invalidation-caused-by-implicit-conversion.md); -- ...... +- 以 % 开头的 LIKE 查询比如 `LIKE '%abc';`; +- 查询条件中使用 OR,且 OR 的前后条件中有一个列没有索引,涉及的索引都不会被使用到; +- IN 的取值范围较大时会导致索引失效,走全表扫描(NOT IN 和 IN 的失效场景相同); +- 发生[隐式转换](https://javaguide.cn/database/mysql/index-invalidation-caused-by-implicit-conversion.html); +- …… + +推荐阅读这篇文章:[美团暑期实习一面:MySQl 索引失效的场景有哪些?](https://mp.weixin.qq.com/s/mwME3qukHBFul57WQLkOYg)。 ### 删除长期未使用的索引