一、索引的意义
表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
二、索引创建与删除、查看
(1)创建索引
1、在表上创建一个简单的索引。允许使用重复的值。索引不止一个列,可以在括号中列出这些列的名称,用逗号隔开。
CREATE INDEX index_name ON table_name (column_name1,..,column_nameN)
2、在表上创建一个唯一的索引。不允许使用重复的值。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name1,..,column_nameN)
3、在创建表时创建索引
CREATE TABLE table_name (
...,
index index_name (column_name[(length)])
);
4、修改表时创建索引
ALTER TABLE table_name ADD UNIQUE index_name (column_list);
(2)删除索引
DROP INDEX [index_name] ON table_name;
(3)查看索引
SHOW INDEX FROM table_name;
三、查询不走索引情况
近期笔试两次遇到了回答索引不使用的情况
(1)建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念
(2)索引列可能包含空值
(3)索引列上有函数操作或者运算操作,导致不走索引
(4)索引不适用于隐式转换的情况
(5)负向条件查询
!=或者<>(不等于), not in , not exist,可能导致不走索引,也可能走 INDEX FAST FULL SCAN
(6)like '%liu' 百分号在前