目录
1. 查看索引
2.创建索引
3.删除索引
4.MySQL8.0索引新特性
支持降序索引
隐藏索引
5.适合创建索引的情况
6.哪些情况不适合创建索引
1. 查看索引
show index from book
2.创建索引
- 创建普通索引
Index idx_bname(book_name)
- 创建唯一索引
UNIQUE INDEX uk_idx_cmt(COMMENT)
- 创建主键索引
book_id INT PRIMARY KEY
- 创建单列索引
INDEX single_idx_name(name(20))
- 创建组合索引
INDEX single_idx_name(name(20))
- 创建全文索引
INDEX single_idx_name(name(20))
- 创建空间索引
SPATIAL INDEX spa_idx_geo(geo)
- 在已经存在的表上创建索引
法1:
ALTER TABLE table_name ADD index [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY]
法2:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name ON table_name
3.删除索引
法1:
ALTER TABLE table_name DROP INDEX index_name;
注意:添加AUTO_INCREMENT约束字段的唯一索引不能被删除
法2:
ALTER TABLE table_name DROP INDEX index_name;
4.MySQL8.0索引新特性
支持降序索引
CREATE TABLE ts1(a int,b int,index idx_a_b(a,b desc));
隐藏索引
注意:主键不能设置
1. 创建表时直接创建
INDEX [indexname](propname1 [(length)]) INVISIBLE
2.创建表以后
在已经存在的表上创建
CREATE INDEX indexname ON tablename(propname[(length)]) INVISIBLE
通过ALTER TABLE语句创建
ALTER TABLE tablename ADD INDEX indexname (propname [(length)]) INVISIBLE;
切换索引可见状态
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #切换成隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #切换成非隐藏索引
注意: 当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的。如果一个索引需要长期被隐藏,那么可以将其删除,因为索引的存在会影响插入、更新和删除的性能。
5.适合创建索引的情况
- 字段的数值有唯一性的限制
- 频繁作为 WHERE 查询条件的字段
- 经常 GROUP BY 和 ORDER BY 的列
- UPDATE、DELETE 的 WHERE 条件列
- DISTINCT 字段需要创建索引
- 多表 JOIN 连接操作时,创建索引注意事项:首先, 连接表的数量尽量不要超过 3 张,其次, 对 WHERE 条件创建索引,最后, 对用于连接的字段创建索引
- 使用列的类型小的创建索引
- 使用字符串前缀创建索引
- 区分度高(散列性高)的列适合作为索引
- 使用最频繁的列放到联合索引的左侧
- 在多个字段都要创建索引的情况下,联合索引优于单值索引
注意:限制索引的数目:单张表不超过6个
6.哪些情况不适合创建索引
- 在where中使用不到的字段,不要设置索引
- 数据量小的表最好不要使用索引
- 有大量重复数据的列上不要建立索引
- 避免对经常更新的表创建过多的索引
- 不建议用无序的值作为索引
- 删除不再使用或者很少使用的索引
- 不要定义冗余或重复的索引