Mysql学习笔记整理之索引

索引的概念:

索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序

为什么要用索引?

  1. 索引能极大的减少存储引擎需要扫描的数据量
  2. 索引可以把随机IO变成顺序IO
  3. 索引可以帮助我们进行分组,排序操作时,避免使用临时表

聚集索引:

数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同

辅助索引末尾指向主键索引,然后通过主键索引找值

如果innodb没有建索引,默认会创建一个隐式主键索引 6bit

只要是索引是连续的,那么数据在存储介质上的存储位置也是连续的

 

联合索引

例如创建的索引是    [name,phone]

  1. 经常用的列优先 [最左匹配原则]
  2. 选择性高的优先 [离散度高原则 ]
  3. 宽度小的列优先 [最少空间原则]

列的离散型:

 count(distinct column):count(column)

比例越大离散性越好,离散性越好选择性越好

最左匹配原则 

对索引中关键字进行计算,一定是从左往右一次进行,且不可跳过

覆盖索引:

如果查询列克通过索引节点中的关键字直接返回,可减少数据库IO,将随机IO变为顺 IO,提高查询

索引的规范:

  1. 索引列的数据长度能少则少。
  2. 索引一定不是越多越好,越全越好,一定建合适的,字段不要太大, 比如phoneNum是11位即可
  3. 建索引,不允许该字段为空
  4. 匹配到前缀可用到索引Like 999%
  5. Where条件中Not in和 <>无法使用索引
  6. 匹配范围值,order by 也可以用到索引
  7. 多用指定列查询,只返回自己想要的数据列,少用select *

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/weijianxing/p/11586703.html