数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样可以在这些数据结构的基础上实现高效查找算法,这种数据结构就是索引。
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名) [USING 索引方法];
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法];
索引一些说明:
1、遵守最左前缀法则,指的是查询从索引的最左列开始并且不跳过索引中的列,对于const,mysql会自动优化,可以违背这个规则,但是最好不要违背。
2、不在索引列上做任何操作,如计算、函数、类型转换等。
3、存储引擎不能使用索引中范围条件右边的列,即范围查询后的索引无效。
4、尽量使用覆盖索引,即只查询有索引的字段。
5、使用!= > < >= <=索引会失效。
6、is null和is not null索引会失效。
7、like以通配符开头('%tang')索引会失效,如果非要使用,可以使用覆盖索引。
8、or索引会失效。
假设有索引a、b、c
where a = 1 a有效
where a = 1 and b=2 a、b有效
where a = 1 and b=2 and c = 3 a、b、c有效
where b = 2 无效
where b = 2 and c = 3 无效
where c = 3 无效
where a = 1 and c = 3 a有效
where a = 1 and b > 2 and c = 3 a、b有效
where a = 1 and b like 'tang%' and c = 3 a、b、c有效
where a = 1 and b like '%tang' and c = 3 a有效
where a = 1 and b like '%tang%' and c = 3 a有效
where a = 1 and b like 'ta%tang%' and c = 3 a、b、c有效