Mysql 索引
1. 索引的概念
索引是创建在表上的,对数据库表中的一列或多列的值进行排序的一种结构。
索引有2种存储类型:B型树索引 和 哈希索引。InnoDB和MyISAM存储引擎支持B型树索引,MEMORY存储引擎支持哈希索引。
优点:提高检索数据的速度。对于有依赖关系的子表和父表之间的联合,可提高查询速度;使用分组和排序子句进行数据查询,可显著节省查询时间。
缺点:创建和维护需要耗费时间,耗费的时间随着数据量的增加而增加;索引需要占用物理空间;增加、修改和删除索引时,需要动态的维护索引,会造成数据维护速度降低。
2.索引的分类
1)普通索引:
不加任何限制条件的索引。
2)唯一性索引:
UNIQUE参数设置唯一性索引。
3)全文索引:
使用FULLTEXT参数设置为全文索引。(全文索引只能创建在CHAR、VARCHAR或TEXT类型字段上)
4)单列索引:
为表的单个字段创建索引。
5)多列索引:
为表的多个字段创建一个索引。
6)空间索引:
使用SPATIAL参数设置。
3. 索引的设计原则
1)选择唯一性索引;
2)为经常需要排序、分组和联合操作的字段建立索引;
3)为常作为查询条件的字段建立索引;
4)限制索引的数目;
5)尽量使用数据量少的索引;
6)尽量使用前缀索引;
7)删除不再使用或很少使用的索引。
4. 创建索引
1)创建表的时候创建索引
CREATE TABLE 表名 ( 属性名 数据类型 约束条件, 属性名 数据类型 约束条件, ... UNIQUE | FULLTEXT | SPATIAL INDEX | KEY 别名 ( 属性名1 (长度) ASC | DESC) );
INDEX和KEY表示指定字段为索引,两者作用相同选其一即可。
ASC/DESC表示升序排列和降序排列。
2)为已经存在的表创建索引
CREATE UNIQUE | FULLTEXT | SPATIAL INDEX 索引名 ON 表名 ( 属性名 (长度) ASC | DESC );
3)用ALTER TABLE语句创建索引
ALTER TABLE 表名 ADD UNIQUE | FULLTEXT | SPATIAL INDEX 索引名 ( 属性名 (长度) ASC | DESC );
5. 删除索引
DROP INDEX 索引名 ON 表名;