Mysql使用索引应该注意的地方

下面是我总结的一些导致索引失效的原因,可能不太全,希望大家指正,后续遇到其他索引失效的问题将进一步补全。
like运算
索引列以like 做运算,不能以%开头,否则索引失效。如下图:
在这里插入图片描述
再看看没有使用到索引的查询时间,从下图可以看出时间为1.8秒
在这里插入图片描述
再看看以%结尾的语句能否使用到索引
在这里插入图片描述
再看看查询速度 0.085秒
在这里插入图片描述
索引列使用函数导致索引失败
使用了函数的查询结果如图

在这里插入图片描述
再看看不使用函数是否能用到索引
在这里插入图片描述
字符串要加引号
条件为字符串的一定要加引号,字符串如果为数字 mysql 会自动转为字符串,但是不使用索引。下图为没有加引号的sql
在这里插入图片描述
下图为加了引号的sql
在这里插入图片描述
多列索引
如果是多列索引,那么只有查询条件使用了多列关键字最左边的前缀时,才可以使用索引,否则将不能使用索引。
下图为一个多列索引
在这里插入图片描述
因为object_id是最左边的前缀,在上个例子中可以看出单独的object_id可以作为索引。但是单独的tenant_id不能作为索引,违反了最左前缀原则,如下图:
在这里插入图片描述
如果使用了多列关键字最左边的前缀(object_id)时,索引生效,如下图:

在这里插入图片描述
需要注意的是跳过中间的列会导致索引失效。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详细内容可阅读《高性能的MySql》。
特别的:当or条件中有未建立索引的列会失效,下图edit_type为整型且未建立索引,导致有索引的tenant_id上的索引失效。当or条件中建立了索引的列使用了函数和用了“%”开头,也会导致该表的已有索引失效。
在这里插入图片描述
后续补充:连表查询时,关联字段的索引只能在其中一个表中使用到。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值