随笔 - 171  文章 - 0  评论 - 0  阅读 - 62311

索引失效场景

什么时没必要用索引

1) 数据唯一性差,区分度不高(一个字段的取值只有几种时)的字段不要使用索引
比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。
2) 频繁更新的字段不要使用索引
比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。
3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引
只有在where语句出现,mysql才会去使用索引
4) where 子句里对索引列使用不等于(<>),使用索引效果一般

什么时候索引失效

有or必全有索引

如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引。

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

 

复合索引未用左列字段(未遵循最左匹配原则)

like以%开头

字段需要类型转换

存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

where中索引列有运算

where 子句里对索引列上有数学运算,用不上索引。

where中索引列使用了函数

where 子句里对有索引列使用函数,用不上索引。

如果mysql觉得全表扫描更快时(数据少)

如果mysql估计使用全表扫描要比使用索引快,则不使用索引,比如数据量极少的表。

posted on   zhengbiyu  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示