索引用来快速查找具有特定值的记录,以B+树(平衡树)的形式保存。索引大大提高了查询速度,但是降低了更新表的速度。建立索引会占用磁盘空间,创建多种组合索引会占用大量空间。索引只是提高效率的一个因素,如果有大数据量的表,需要研究建立最优秀的索引,优化查询语句。
索引的类型
- 普通索引:
CREATE INDEX index_name ON table_name (column_name)
最基本的索引类型,而且它没有唯一性之类的限制,即允许该列有重复的值 - 唯一性索引:
CREATE UNIQUE INDEX index_name ON table_name (column_name)
- 主键索引:
ALTER TABLE table_test ADD PRIMARY KEY (id)
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般是在建表的时候同时自动创建主键索引 - 组合索引:
ALTER TABLE table ADD INDEX name_city_age (name,city,age)
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
- 聚集索引:如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是「平衡树」结构,换句话说,就是整个表就变成了一个索引,也就是所谓的「聚集索引」,一个表只能有一个聚集索引。 平衡树的查找次数是以树的层数为底,记录总数的对数
- 非聚集索引:同样采用平衡树作为索引的数据结构,各节点的值类源于索引字段值。每次给字段新建索引,字段数据会被复制一份用于生成索引。
- 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。
- 覆盖索引:也就是平时所说的复合索引或者多字段索引查询。当为字段建立索引以后,字段中的内容会被同步到索引之中,如果为一个索引指定两个字段,那么这个两个字段的内容都会被同步至索引之中。因此不需要通过主键ID值的查找数据行的真实所在,直接取得叶节点中查询字段的值返回即可。