一、索引的优点
1、减少不必要数据的扫描;
2、帮助服务器避免排序和临时表
3、将随机io变成顺序io
二、索引的用处
1、快速查找匹配WHERE子句的行;
2、在多个索引之间进行选择,mysql通常会使用找到最少行的索引(虽然可以创建多个索引,但是mysql只会选择其中一个,这也就解释组合索引出现);
3、在使用组合索引时,mysql优化器可以使用索引的任何最左前缀来查找行,也就是最左匹配原则;
4、当有表连接的时候,从其他表检索行数据
5、查找特定索引列的min或max值
6、如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组,也就是覆盖索引;
7、在某些情况下,可以优化查询以检索值而无需查询数据行
三、索引分类
1、主键索引 ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) 该语句添加一个主键,这意味着索引值必须是 唯一的,且不能为NULL。
2、唯一索引 ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):创建索引的值必须是唯一的(除了 NULL外,NULL可能会出现多次)
3、普通索引 ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
4、全文索引 ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用 于全文索引
5、组合索引 ALTER TABLE tbl_name ADD INDEX index_name (column_list1,column_list2)
四、索引的匹配方式
1、全值匹配:与索引值进行一一匹配;
2、匹配最左前缀:只匹配前面的几列;
3、匹配列前缀:可以匹配某一列的值的开头部分,索引可以只存储数据的前部分信息;
4、匹配范围值:可以查找某一个范围的数据;
5、精确匹配某一列并范围匹配另外一列:可以查询第一列的全部和第二列的部分;
6、只访问索引的查询:查询的时候只需要访问索引,不需要访问数据行,本质上就是覆盖索引;
显示索引信息: mysql> SHOW INDEX FROM table_name; \G