欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql学习笔记整理之索引

程序员文章站 2023-03-21 11:43:24
索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 聚集索引: 数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同 辅助索引末尾指向主键索引,然后通过主键索引找值 如果innodb没有建索引,默认会创建一个隐式主键索引 6bit 只要是索引是连 ......

索引的概念:

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

为什么要用索引?

  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 *