首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

卓象程序员:MYSQL索引失效

在数据库中做查询等操作,经常发现查询很慢,但是已经在列上建了索引,最后经过研究发现,很多种情况引起了索引失效。

表结构:

如下图建立一个组合索引IDX_NAME_AGE_TEL

比如以下几种情况,将导致索引失效:

1.左前缀法则:

查询从索引的最左侧前列开始,并且不能跳过索引中的列

如上图所示:1·2·3中可以看到使用多个索引的key_len长度变化,

在图4中由于左侧列name字段没有使用索引导致全表扫描,索引失效,

在图5中由于没有使用age字段索引所以导致tel字段索引失效。

2.不能在索引上做任何操作:

计算、函数、类型转换(包括隐士转换),会导致索引失效,若最左侧索引使用会导致索引失效全表扫描。

图1:对name字段进行了函数操作,索引失效导致全表扫描。

图2:tel字段是char类型,书写方式是数字类型的书写方式,MYSQL进行了隐式数据操作导致索引失效。

3. 范围查询:

(!=, ,>,

4. like

like以通配符开头('%abc')会导致自身与右侧索引失效,若最左侧索引使用会导致索引失效全表扫描。使用like 需要('abc%'),使用覆盖索引可以使最左侧字段使用like以通配符开头('%abc')生效。

5. 少用or,用它来连接时索引会失效。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191022A04PIY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券