MySQL索引的使用

摘要:MySQL索引通常会提高查询的效率,但不恰当的使用会为数据库的内存和性能带来影响。

1.不要在列上使用函数或者运算,因为会导致全表扫描。

select * from news where year(time)>2017

可以改造为select * from news where publish_time < '2017-01-01'

2.尽量避免使用!=或者not in 或者<>,会导致索引失效

3.尽量避免使用or来连接。

4.多个单列索引

MySQL只能使用一个索引,会从多个索引中选择一个,如果创建多个单列索引,只能使用其中的一个,推荐使用复合索引。

5.复合索引的最左前缀

复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则无法使用索引。

select * from news where news_month = 1

此时,无法使用 new_idex(news_year, news_month) 索引,因为遵守“最左前缀”原则,在查询条件中没有使用复合索引的第一个字段,索引是不会被使用的。

6.范围查询会导致复合索引的右边失效

查询中的某个列有范围查询,则其右边所有列都无法使用索引优化查找。

这个时候,我们应该避免采用范围查询,采用一些数据库结构来实现去掉范围查询。

7.索引不会包含有null值的列

列中包含null值将不会被包含在索引中。在数据库设计时,应该避免列使用null

8.隐式转换会导致索引失效

9.like %value% 会导致全表扫描

posted @ 2018-04-02 09:10  Bparadise  阅读(97)  评论(0编辑  收藏  举报