Mysql索引类型以及适用场景

1.普通索引 
最基本的索引,没有任何限制 
2.唯一索引 
索引列的值必须唯一,但允许有空值 
3.主键索引 
主键索引属于一种特殊的唯一索引,不允许有空值 
4.单列索引 
单个多列索引(组合索引)效率高于多个单列索引 
5.最左前缀(Leftmost Prefixing):多列索引 
多列索引只有在where条件中含有索引中的首列字段时才有效 
例如:fname_lname_age索引, 
以下的搜索条件MySQL都将使用 : 
fname_lname_age索引:firstname,lastname,age;firstname,lastname;firstname,其他情况将不使用

二、根据sql查询语句确定创建哪种类型的索引,如何优化查询 

 

1. 何时使用聚集索引或非聚集索引?

 

聚集索引对于那些经常要搜索范围值的列特别有效。

聚集索引一张表只能创建一个,非聚集索引一张表可以创建多个,在mysqlInnoDB引擎是唯一支持聚集索引的存储引擎。InnoDB按照主键(Primary Key)进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。

2注意事项:

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

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

order by中的列是不会使用索引的;

MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形);

不要在列上进行运算;


 

你可能感兴趣的:(Mysql索引类型以及适用场景)