mysql 索引

  • 索引概念、索引模型

    索引实际上是一种数据结构,可以帮助咱们快速的检索数据库中的数据数据库

    常见的MySQL主要有两种结构:Hash索引和B+ Tree索引, InnoDB引擎,默认的是B+树。数据结构

    Hash索引和B+ Tree索引 优缺点:排序

    哈希表是一种以key-value存储数据的结构,因此多个数据在存储关系上是彻底没有任何顺序关系的, 因此,对于区间查询是没法直接经过索引查询的,就须要全表扫描。因此,哈希索引只适用于等值查询的场景。索引

    而B+ Tree是一种多路平衡查询树,因此他的节点是自然有序的(左子节点小于父节点、父节点小于右子节点),因此对于范围查询的时候不须要作全表扫描。效率

   哈希索引没办法利用索引完成排序 哈希索引不支持多列联合索引的最左匹配规则 若是有大量重复键值得状况下,哈希索引的效率会很低,由于存在哈希碰撞问题数据

  • 聚簇索引、覆盖索引

     索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。查询

     而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引。哈希表

     区别:聚簇索引查询会更快,由于主键索引树的叶子节点直接就是咱们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值之后,须要回表查询屡次模型

     覆盖索引 :

     指一个查询语句的执行只用从索引中就可以取得,没必要从数据表中读取。也能够称之为实现了索引覆盖。

     当一条查询语句符合覆盖索引条件时,MySQL只须要经过索引就能够返回查询所须要的数据,这样避免了查到索引后再返回表操做,减小I/O提升效率。

  • 联合索引、最左前缀匹配

      在建立多列索引时,咱们根据业务需求,where子句中使用最频繁的一列放在最左边,由于MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,

      在检索数据时从联合索引的最左边开始匹配。因此当咱们建立一个联合索引的时候,如(key1,key2,key3),至关于建立了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则。

相关文章
相关标签/搜索