索引简述及创建高性能索引

一. 何为索引

就如同看一本书,想要从一本较厚的书中快速查找某一项内容,那么【目录】就是最好的工具、指引,从目录可以快速定位到内容所在书籍页面,直达书籍页面研究个人感兴趣的内容。
那么,数据库索引就是数据库的【目录】,是存储引擎用于快速找到记录的一种数据结构。设计优良的索引能大幅度提升查询性能,从而提升整体系统的并发性能。

在现在系统中,针对数据库的操作大多会使用到ORM,ORM虽能帮助实现复杂的各类数据库操作,但无法生成合适的索引查询。
在精妙和复杂的索引面前,ORM都只是“浮云”。

二. 索引类型

索引有很多种类型,可以为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎中而不是服务器层实现。

下面就来简单探究下MySQL支持的索引类型。

哈希索引

哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。
在设计中,将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

从数据结构方面考虑,哈希索引的实现是表或者链表,其内存结构也十分紧凑,这就使得哈希索引的速度非常快。但是也有其自身的限制:

  • 哈希索引只包含哈希值和行指针,不存储字段值,所以不能使用索引中的值来避免读取行。
  • 哈希索引数据不是按照索引值顺序存储的,就无法用于排序。
  • 哈希索引是使用索引列的全部内容来计算哈希值,并根据哈希值进行查找,故而不支持索引列匹配查找,相应的,也不支持进行范围查找。
  • 如果存在哈希冲突,冲突值按照链表进

你可能感兴趣的:(MySQL,mysql,数据库,索引)