索引基本概念
索引的定义
索引相当于目录,是添加在数据库表的字段上添加的。使用索引可以有效提高查询速率。
索引的副作用
索引需要占据额外的磁盘空间,在插入和修改数据时要花费更多的时间,因为索引也要随之变动
索引的类型
主键索引(Primary Key):加在唯一能标识一组数据的字段或字段组上(主键或主键组),不能为空,可以确定唯一数据记录在数据库表中的位置。
唯一索引 (Unique): 避免同一个表中某数据列中的值重复(只要求字段或字段组的内容唯一),不能为空,但是可以有多个唯一索引。
常规索引(Index):没有什么限制,可以重复,可以为空,主要用来加速查询。
全文索引(FullText).:快速定位特定数据,只能用在CHAR , VARCHAR , TEXT等数据列类型。在执行复杂文本的搜索时非常有用。
空间索引:MySQL在5.7之后的版本支持了空间索引,字段必须不为空,主要用于GIS(地理信息系统)和测绘,可以快速查找特定区域的所有对象或与一个对象相邻的对象。
组合索引:一个或多个字段的索引,这些字段的组合必须是唯一的,遵循最左原则,可以提高在多字段查询的效率。
创建索引
直接创建索引(create index)
注意!主键索引无法使用此方式 进行创建
CREATE INDEX 索引名 ON 表名 (列名[(length)]);
例:create index name_index on SC(name);
修改表结构方式添加索引(alter update)
ALTER TABLE 表名 ADD INDEX 索引名 (列名);
例: alter table SC add index id_index (id);
创建表结构时创建索引(create table)
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名))
例: create table SC( id int(10), name varchar(20), index id_index (id));
查看索引
查询语句
show index from 表名;
show index from 表名\G
show keys from 表名;
show keys from 表名\G
关键字解析
Non_unique |
如果索引不能包括重复词,则为 0;反之为1 |
Key_name |
索引的名称 |
Seq_in_index |
索引中的列序号,从 1 开始 |
Column_name |
列名 |
Collation |
列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或 NULL(无分类) |
Cardinality |
索引中唯一值数目的估计值 |
Sub_part |
如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则 NULL。 |
Packed |
关键字如何被压缩。如果没有被压缩,则为 NULL。 |
Null |
如果列有空值,为YES。如果没有,则为NO |
Index_type |
用过的索引方法(BTREE, FULLTEXT, HASH, RTREE) |
Comment |
备注 |