索引的类型、优点及评价索引的三星系统

索引,在mysql中也叫作“键(key)”,是存储引擎用于快速找到记录的一种数据结构。索引对于对于良好的性能非常关键。

譬如 mysql> select first_name from sakila.actor where actor_id = 5;

如果在actor_id列上建有索引,则mysql将使用该索引找到actor_id为5的行,也就是说,mysql先在索引上按值进行查找,然后返回所有包含该值的数据行

索引可以包含一个或多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为mysql只能高效地使用索引的最左前缀列。

索引有很多种类型,可以为不同的场景提供更好的性能。在mysql中,索引是在存储引擎层而不是服务器层实现的。所以并没有统一的索引标准:不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。

下面我们来看看mysql支持的索引类型,以及它们的优缺点:

  1. B+Tree索引
  2. 哈希索引
  3. 空间数据索引
  4. 全文索引

B+Tree索引:

它使用B+Tree数据结构来存储数据,大多数mysql引擎都支持这种索引。

存储引擎以不同的方式使用B+Tree索引,性能也各有不同,各有优劣。

引擎 InnoDB MYISAM
索引存储方式  原数据格式存储  前缀压缩技术使得索引更小
引用被索引的行方式  根据主键引用被索引的行  通过数据的物理位置引用被索引的行

哈希索引:

空间数据索引:

全文索引:

索引的优点:

索引可以让服务器快速地定位到表的指定位置。但是这并不是索引的唯一作用。根据创建索引的数据结构不同,索引也有一些其他的附加作用。

最常见的B+Tree索引,按照顺序存储数据,所以mysql可以用来做order by和group by操作。因为数据是有序的,所以B+Tree也就会将相关的列值都存储在一起。最后,因为索引中存储了实际的列值,所以某些查询只使用索引就能够完成全部查询。

总结下来,索引有如下三个优点:

  1. 索引大大减少了服务器需要扫描的数据量
  2. 索引可以帮助服务器避免排序和临时表
  3. 索引可以将随机I/O变为顺序I/O

如何评价一个索引是否适合某个查询的“三星系统”:

  1. 索引将相关的记录放到一起则获得一星
  2. 如果索引中的数据顺序和查找中的排列顺序一致则获得二星
  3. 如果索引中的列包含了查询中需要的全部列则获得三星

猜你喜欢

转载自www.cnblogs.com/i-hard-working/p/9047445.html