前缀索引和覆盖索引

前缀索引

当索引的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,就用索引的前部分字串索引,这样索引占用的空间就会大大减少,并且索引的选择性也不会降低很多。而且是对BLOB和TEXT列进行索引,或者非常长的VARCHAR列,就必须使用前缀索引,因为MySQL不允许索引它们的全部长度。

使用:
列的前缀的长度选择很重要,又要节约索引空间,又要保证前缀索引的选择性要和索引全长度选择性接近。

覆盖索引(covering index)

提出问题:如果可以通过索引直接获取行的数据,这样就不需要再去读取数据行。也就是说,如果叶子节点中已经包含要查询的数据,那还有什么必要再回表查询呢?

一个索引已经包含(或覆盖)所有需要查询的字段,称之为“覆盖索引”

覆盖索引(或称索引覆盖),即从辅助索引中就可以得到要查询的记录,而不需要查询聚簇索引中的记录(显然,聚簇索引是一种覆盖索引,因为聚簇索引中包含了数据行的全部数据)

换句话说:就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

举例说明:例如student表中有一个联合索引(name,age),如果MySQL只需要访问这两列,就可以使用这个索引做覆盖。

当执行Select name,age from student查询语句时,可以从索引中获取要查询的数据,不用再回表查询。

你可能感兴趣的:(mysql)