MySql索引注意项

设置索引注意点:

  1. 多列索引 有最佳左前缀特性 所以尽量左边的字段是最常用的.
  2. 索引不会包括有NULL值,就是有NULL,索引就失效
  3. 不适合键值较少的列(重复数据较多的列)

索引失效的几种情况:

1.对于多列索引,不使用的第一部分,则索引失效(违反最佳左前缀原则)
1.1如果索引了多列,要遵守此规则,指的是从索引最左前列开始并且不跳过索引中的列;
1.2带头大哥不能死,中间兄弟不能断;

2.like查询以%开头,索引失效
3.字符串不加单引号,索引失效
4.不在索引列上做任何操作 ,否则索引失效
错误的例子:select * from test where id-1=9;

正确的例子:select * from test where id=10;

5.!=或者<>(不等于),可能导致不走索引,也可能走 INDEX FAST FULL SCAN

例如select id from test where id<>100

6.where 子句中使用 IS NULL 或者 IS NOT NULL

7.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因);要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引,但是列太多了也不会走,举个例子两个列会走,三个就不会走,慎用

关于in 使用in在mysql 4.0 以前不会走索引,但是之后都会走的

8.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

索引无法存储null值:

a.单列索引无法储null值,复合索引无法储全为null的值。

b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。

为什么索引列无法存储Null值?

a.索引是有序的。NULL值进入索引时,无法确定其应该放在哪里。(将索引列值进行建树,其中必然涉及到诸多的比较操作,null 值是不确定值无法

比较,无法确定null出现在索引树的叶子节点位置。)

b.如果需要把空值存入索引,方法有二:其一,把NULL值转为一个特定的值,在WHERE中检索时,用该特定值查找。其二,建立一个复合索引。例如

create index ind_a on table(col1,1); 通过在复合索引中指定一个非空常量值,而使构成索引的列的组合中,不可能出现全空值。

参照:https://www.cnblogs.com/xixibaby/p/6409928.html

https://www.cnblogs.com/shynshyn/p/7887742.html

https://www.cnblogs.com/xqzt/p/4467038.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值