MySql索引优化

索引的类型

1. 普通索引:最基本的索引,没有任何限制。

2. 主键索引(Key):特殊的唯一索引,不允许有空值。

3. 唯一索引(Unique):索引列的值必须唯一,允许有空值。如果是组合索引,则该组合的值必须唯一。

4. 组合索引(Compose):多个列组合的索引。比如cityId、address、name三列建了组合索引,则相当于建立了三组索引:cityId、address、name, cityId、address, cityId, 这是因为MySQL组合索引“最左前缀”的结果,就是从最左边的列开始组合。

5. 短索引:创建索引时,如果是varchar或char列,索引的length可以小于列的实际长度,比如name(20),可以建索引name_index(10),即提高查询速度,也提交插入、更新速度。 

 

索引起作用的SQL语句

=、>、<、>=、<=、like、like 'prefix%'、in、between

 

索引不起作用的条件

1. 有Null值的列

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

2. like语句的%在前面 

select * from city where name like '%南'
 匹配符%在查询关键词前面的like语句,将不使用索引。

3. not in、<>、!= 语句。

4. where语句中已经使用了索引,order by后面的列不使用索引。

5. 在索引列上进行计算

select * from user where YEAR(update_time)>2012

 这将在每行数据进行计算,导致索引失效从而全表扫描。可以将语句改为:

select * from user where update_time>‘2012-01-01’

 

More  info... http://blog.linezing.com/?p=798

你可能感兴趣的:(mysql)