1.普通索引
最基本的索引,没有任何限制
2.唯一索引
索引列的值必须唯一,但允许有空值
3.主键索引
主键索引属于一种特殊的唯一索引,不允许有空值
4.单列索引
单个多列索引(组合索引)效率高于多个单列索引
5.最左前缀(Leftmost Prefixing):多列索引
多列索引只有在where条件中含有索引中的首列字段时才有效
例如:fname_lname_age索引,
以下的搜索条件MySQL都将使用 :
fname_lname_age索引:firstname,lastname,age;firstname,lastname;firstname,其他情况将不使用
二、根据sql查询语句确定创建哪种类型的索引,如何优化查询
1. 何时使用聚集索引或非聚集索引?
聚集索引对于那些经常要搜索范围值的列特别有效。
聚集索引一张表只能创建一个,非聚集索引一张表可以创建多个,在mysql中InnoDB引擎是唯一支持聚集索引的存储引擎。InnoDB按照主键(Primary Key)进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。
2注意事项:
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
order by中的列是不会使用索引的;
MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形);
不要在列上进行运算;