MySQL数据库优化(三)

适合建索引的情况

  • 频繁作为WHERE条件语句查询的字段
  • 关联字段需要建索引
  • 排序字段可以建索引
  • 分组字段需要建索引
  • 使用到聚合函数的字段

不适合建索引的情况

  • 频繁更新的字段
  • WHERE条件用不到的字段
  • 表数据量较小
  • 数据重复较为均匀,例如性别,布尔类型等
  • WHERE条件中参与列计算的字段

索引失效的情况

  • 选择列用到*号,给name加索引
  • 不遵循复合索引的字段顺序,复合索引具有传递性,如果中间某个字段无效索引,则后面的字段也不会索。给name,age,phone加复合索引
    • 复合索引全部使
    • 复合索引无效
    • 复合索引部分有效,这里虽然使用到里复合索引,但真正的只有name字段使用到了索引,而phone字段没有使用索引。可以通过key_len与全部使用索引比较,这个较少说明索引的字段少于正常,间接反映age和phone字段没有参与索引
  • 复合索引字段用到>和<查找,这里age字段使用大于号,后面的phone字段没有索引,从key_len显示出来的结果可以看出。
  • 在索引列上做计算,给age加索引
  • 在索引列上做类型转换,MySQL5.7 +以上
  • 在索引列做函数计算
  • 在索引列上使用不等于!=或<>
  • 在索引列上使用IS NULL或IS NOT NULL,可能会导致索引无效
  • 在索引列上使用like,并且最左边有%,右边有%则可以
  • WHERE语句里出现OR

 复合索引相关测试

1、复合索引使用> 或 <符号

可以看出这个是使用了复合索引的,但是key_len为65说明phone并没有用到索引。

2、复合索引进行运算

复合索引只有name有效。

3、复合索引不等于<>或!=

复合索引phone无效。

4、复合索引使用IS NULL

奇迹的是IS NULL竟然对复合索引无效,而且不管位置在哪。

但是对于IS NOT NULL,当在第一个字段时索引无效,而在第二个字段时,phone无效。

 5、复合索引使用LIKE

LIKE的使用与单索引效果一致。

6、复合索引使用OR

OR简直是大杀器,不管在哪里用都会导致索引失效。

posted @ 2017-12-17 16:12  huanStephen  阅读(164)  评论(0编辑  收藏  举报