索引是什么
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。
索引存储着数据库数据在磁盘上的物理地址,查询时利用索引可以加快执行速度,尤其是数据量比较大时,索引的效果非常明显。
一个非常恰当的比喻就是书的目录页与书的正文内容之间的关系,为了方便查找书中的内容,通过对内容建立索引形成目录。因此,要明白的一点就是,索引它也是一个文件,它是要占据物理空间的,而且占用的空间还不小,针对多个维度建立索引并且数据量还比较大,那么索引占用的物理空间和数据空间差不多。
索引文件:
1.对于innodb引擎来说
- .frm后缀的文件存储的是表结构;
- .ibd后缀的文件存放索引文件和数据。
2.对于myisam引擎来说
- .frm后缀的文件存储的是表结构;
- .myd后缀的文件存储的是表数据;
- .myi后缀的文件存储的就是索引文件。
查看索引
show index from tblname;或者show keys from tblname;
字段名 : 含义
Table : 表的名称
Non_unique : 如果索引不能包括重复词,则为0。如果可以,则为1
Key_name : 索引的名字
Seq_in_index : 索引中的列序列号,从1开始,比如联合索引会涉及多个列
Column_name : 列名称
Collation : 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)
Cardinality : 索引中唯一值的数目的估计值。
Sub_part : 如果列只是被部分地编入索引,则为被编入索引的字符的数目。否则为NULL
Packed : 指示关键字如何被压缩。如果没有被压缩,则为NULL
Null : 如果列含有NULL,则含有YES。如果没有,则该列含有NO
Index_type : 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)
Comment : 注释