Mysql 各种索引的介绍
2017-04-10 11:22
393 查看
Mysql索引类型分为主键索引、唯一索引、普通索引、全文索引、组合索引。
(1)普通索引(Index):最基本的索引,它没有任何限制。
(2)唯一索引(Unique Index):它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
(3)主键索引(Primary Index):它是一种特殊的唯一索引,不允许有空值(唯一索引允许)。主键索引可以作为外键,唯一索引不可以,并且每个表只能由一个主键索引。
(4)全文索引(FullText Index):在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录,全文索引只可创建在BLOB、TEXT、VARCHAR、CHAR等特殊类型上。
要注意的是Mysql全文索引中分词是英文分词,要想中文分词必须要有一些插件的支持。
(5)组合索引(联合索引、复合索引):多个列组合成一个索引,组织索引遵循最左前缀原则,即组合索引中最先出现的列要出现在查询语句中,索引才会生效。
组合索引是先对第一列进行排序,第一列相同时再对第二列排序......
组合索引的不严谨检索过程就是先根据第一个索引找到对应的数据,再根据第二个索引找,一直这样下去。
有时还可以看到多列索引、短索引(前缀索引)、覆盖索引(索引覆盖)、聚簇索引(聚集索引)和非聚簇索引,这些索引其实都不能将单独它归为一个索引类型。
(1)多列索引其实就是一个表中的多个索引。
(2)短索引,有时一个字段,如varchar(100),建立索引会浪费大量空间,这时候就使用短索引,对该字段的前面n个字节建立索引,即加快了查询速度,又节省了空间,短索引的奖励方法和普通索引差不多index(a(10)),这样就选取了a字段的前10字节建立索引了。
(3)覆盖索引,至于覆盖索引,更谈不上是一类索引了。覆盖索引用通俗的话讲就是在select的时候只用去读取索引而取得数据,无需进行二次select相关表。这样的索引的叶子节点上面也包含了他们索引的数据。覆盖索引是建立在联合索引之上的,当要select的字段都是在一个联合索引之下的,就不会再去索引表,直接从索引读数据。
(4)聚簇索引和非聚簇索引,这类索引其实不用我们手动建立的,在mysql innodb中只要指定主键就会自动建立聚簇索引(myisam没有聚簇索引),聚簇索引指的数据是索引顺序和物理存放顺序是一致的,非聚簇索引则不一致。
聚簇索引的有点就是查询速度快,但是相对的要维护物理存放顺序和索引顺序一致,在增删的性能就不如非聚簇索引
下面的表总结了何时使用聚集索引或非聚集索引:
(1)普通索引(Index):最基本的索引,它没有任何限制。
(2)唯一索引(Unique Index):它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
(3)主键索引(Primary Index):它是一种特殊的唯一索引,不允许有空值(唯一索引允许)。主键索引可以作为外键,唯一索引不可以,并且每个表只能由一个主键索引。
(4)全文索引(FullText Index):在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录,全文索引只可创建在BLOB、TEXT、VARCHAR、CHAR等特殊类型上。
要注意的是Mysql全文索引中分词是英文分词,要想中文分词必须要有一些插件的支持。
(5)组合索引(联合索引、复合索引):多个列组合成一个索引,组织索引遵循最左前缀原则,即组合索引中最先出现的列要出现在查询语句中,索引才会生效。
组合索引是先对第一列进行排序,第一列相同时再对第二列排序......
组合索引的不严谨检索过程就是先根据第一个索引找到对应的数据,再根据第二个索引找,一直这样下去。
有时还可以看到多列索引、短索引(前缀索引)、覆盖索引(索引覆盖)、聚簇索引(聚集索引)和非聚簇索引,这些索引其实都不能将单独它归为一个索引类型。
(1)多列索引其实就是一个表中的多个索引。
(2)短索引,有时一个字段,如varchar(100),建立索引会浪费大量空间,这时候就使用短索引,对该字段的前面n个字节建立索引,即加快了查询速度,又节省了空间,短索引的奖励方法和普通索引差不多index(a(10)),这样就选取了a字段的前10字节建立索引了。
(3)覆盖索引,至于覆盖索引,更谈不上是一类索引了。覆盖索引用通俗的话讲就是在select的时候只用去读取索引而取得数据,无需进行二次select相关表。这样的索引的叶子节点上面也包含了他们索引的数据。覆盖索引是建立在联合索引之上的,当要select的字段都是在一个联合索引之下的,就不会再去索引表,直接从索引读数据。
(4)聚簇索引和非聚簇索引,这类索引其实不用我们手动建立的,在mysql innodb中只要指定主键就会自动建立聚簇索引(myisam没有聚簇索引),聚簇索引指的数据是索引顺序和物理存放顺序是一致的,非聚簇索引则不一致。
聚簇索引的有点就是查询速度快,但是相对的要维护物理存放顺序和索引顺序一致,在增删的性能就不如非聚簇索引
下面的表总结了何时使用聚集索引或非聚集索引:
动作描述 | 使用聚集索引 | 使用非聚集索引 |
列经常被分组排序 | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
一个或极少不同值 | 不应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
频繁修改索引列 | 不应 | 应 |
相关文章推荐
- mysql:索引介绍和各种索引解释以及创建语句
- 各种MySQL索引类型的介绍
- mysql:索引介绍和各种索引解释以及创建语句
- [项目过程中所遇到的各种问题记录]目录索引以及简单介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- 浅析MySQL各种索引
- 浅析MySQL各种索引
- MYSQL索引的介绍
- Mysql索引详细介绍
- [转]MySQL单列索引和组合索引的区别介绍
- Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
- MySql索引的使用方法及详细介绍
- MySQL单列索引和组合索引的区别介绍
- mysql索引类型详细介绍与用法分析
- MySQL各种索引的概念
- Mysql索引介绍与使用
- MySQL索引与高性能SQL介绍
- MySQL索引-Hash索引与B-Tree索引 介绍及区别
- MySQL单列索引和组合索引的区别介绍