索引

索引

a9fcf343ebe5008f259d1c053bb591d18940fbd1

a1612519d7fd852f32209c30a3af1328b6c09bb9


帮助MySQL高效获取数据的数据结构
e7c54cc0ddb8294949b84de13870bf35e6061a37

45d23af5d357e7fb513b4b58937887eaa1e44273

索引结构
b861e2b94bc16fe70dc1c6f7ed16122cbb377d67

f67231983a0d00997de80581fa478c9553ac90ef

  1. B+树的索引
    b598c5ef9030f4fd5d700f59d07d26f3f19be382

6c91b275f8b9d24e2250da3b568a7362981f54d6


  1. 哈希索引
    86d0b27f8fba97cff9692c29f39ef8282316bdd0

f8c009d0f548be5c972f7466eb0395b509816de9

e38365a66dfeb910aff5e9da6a504430e634e77b

索引分类
ed3d66a0d16327781fb99f641e3bf9debeba3f33

InnoDB存储引擎中, 根据索引的存储方式分为以下两种:
3ab6ffb6d296aa036466f75fe4496f18e440ea7b

简单理解,数据库默认有一个主键用来对应行找,
你给主键id就直接找,如果不是id就利用他找到id,再用id找.

聚集索引存数据(row) ,二级索引存主键–>再通过主键去找row
37a3c5c09e1dad7476aadf2f4235b006f247278f

索引语法
3bcd8670e90120a1b4f18cb809500f475a0f10e0

性能分析

  1. 查询频次
    a90e527a4f3d6bcd501a5a8c2a88140704897a66

  2. 慢查询日志
    bbe3f34b501466d65a9114e3fc25208844bd78b7

  1. Show Profile

f14e350555bb201ba1d3a84b7b233968cc3927de

  1. Explain执行计划查询

be23caa4f9c8f327931f7bf99430c9a29ff3964c

4e9fabd3fc6dae6fd3e27be582bf7388d9422848

ea0d550e73085aec47b21f8f8777e4cc61b65f7c

索引对于执行效率的提升
13a44c7330c6be233f60198be6fd8d1b8ae0a908

查询规则

  1. 最左前缀法则其实就是在说:联合索引只有从最左边的列开始,才能被用上。
    339e08f16e46eac8509cc25448640ec139b50d2f

9708b2f6ad284e3ebd81f300008515a8d5a236a0

2.遇到范围查询, 后面直接废掉 , 核心规则是:一旦在联合索引里遇到范围查询(> < >= <= BETWEEN LIKE 这种),
它右边的列就不能再用到索引了。等值能走到底,范围就断路.

28150a597721a46df7aa0364c71f96eb5b77f443

4734522d23130ecc805405b783dae529840fcef6

索引失效情况
情况一
总结:范围不带等于、函数、字符串不带‘’,左边界模糊查询 —>都不走索引

情况二
总结:or条件左右都需要创建索引
数据分布影响: 走不走索引取决于当前数据库表结构相应字段

SQL提示

5010d224ebd759c5351c4611bac34354f4f697b4

覆盖索引 和 回表查询

1f0bfddffb776007abfb2c95e1ce9a709c2e87ea

回表就是查到了id再去聚集索引查询
二级索引挂的是id
覆盖索引可以更大可能的避免回表查询

前缀索引

70b6a48377ecd88f44af5a45a4bd2dcbba8b4067

单列索引和联合索引
尽量使用联合索引而不要使用单列索引 , 因为联合索引往往能提供更多的所需的信息

索引的设计原则

08afe6f3a78772410607c41f4d284e0ceab56f6c