Mysql 各种索引的介绍

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没有聚簇索引),聚簇索引指的数据是索引顺序和物理存放顺序是一致的,非聚簇索引则不一致。

聚簇索引的有点就是查询速度快,但是相对的要维护物理存放顺序和索引顺序一致,在增删的性能就不如非聚簇索引

下面的表总结了何时使用聚集索引或非聚集索引:
动作描述使用聚集索引使用非聚集索引
列经常被分组排序
返回某范围内的数据不应
一个或极少不同值不应不应
小数目的不同值不应
大数目的不同值不应
频繁更新的列不应
外键列
主键列
频繁修改索引列不应


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值