MySQL实战(三)索引的注意事项

来源:互联网 发布:网宿科技 阿里云 编辑:程序博客网 时间:2024/05/29 01:54

1、不要在列上进行运算,这将导致索引失效而进行全表扫描。例如

select * from user where YEAR(birthday)<1990;

2、为多个列创建独立的索引,大部分并不能提高MySQL的查询性能。因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

3、MySQL组合索引“最左前缀”原则,指的是MySQL只能高效地使用索引的最左前缀列。所以,在多列索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则无法使用索引。例如,你在用户表上创建了一个多列索引t_index(sex,age),如果你这个时候没有查找某个特定的性别,这个索引时无法使用的。

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

where age>10 and age<90 and name='lianggzone'

5、只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

6、如果一个索引包含所有需要的查询的字段的值,我们称之为覆盖索引。覆盖索引是非常有用的工具,能够极大的提高性能。因为,只需要读取索引,而无需读表,极大减少数据访问量。

7、like语句,在like “value%”可以使用索引,但是like “%value%”不会使用索引,走的是全表扫描。

8、有时原本使用索引的执行计划,因为使用MySQL的判断机制,反而选择走全表扫描或者走的不是我们预期的索引,因此必须通过强制索引的方式引导优化器采取正确的执行计划。使用强制索引,SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。

SELECT * FROM TABLE1 FORCE INDEX (FIELD1) … 
9、使用忽略索引,表中FIELD1和FIELD2上的索引不被使用。

SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) … 





0 0
原创粉丝点击