Mysql学习笔记整理之索引
程序员文章站
2023-03-21 11:43:24
索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 聚集索引: 数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同 辅助索引末尾指向主键索引,然后通过主键索引找值 如果innodb没有建索引,默认会创建一个隐式主键索引 6bit 只要是索引是连 ......
索引的概念:
索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序
为什么要用索引?
- 索引能极大的减少存储引擎需要扫描的数据量
- 索引可以把随机io变成顺序io
- 索引可以帮助我们进行分组,排序操作时,避免使用临时表
聚集索引:
数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同
辅助索引末尾指向主键索引,然后通过主键索引找值
如果innodb没有建索引,默认会创建一个隐式主键索引 6bit
只要是索引是连续的,那么数据在存储介质上的存储位置也是连续的
联合索引
例如创建的索引是 [name,phone]
- 经常用的列优先 [最左匹配原则]
- 选择性高的优先 [离散度高原则 ]
- 宽度小的列优先 [最少空间原则]
列的离散型:
count(distinct column):count(column)
比例越大离散性越好,离散性越好选择性越好
最左匹配原则:
对索引中关键字进行计算,一定是从左往右一次进行,且不可跳过
覆盖索引:
如果查询列克通过索引节点中的关键字直接返回,可减少数据库io,将随机io变为顺 序io,提高查询
索引的规范:
- 索引列的数据长度能少则少。
- 索引一定不是越多越好,越全越好,一定建合适的,字段不要太大, 比如phonenum是11位即可
- 建索引,不允许该字段为空
- 匹配到前缀可用到索引like 999%
- where条件中not in和 <>无法使用索引
- 匹配范围值,order by 也可以用到索引
- 多用指定列查询,只返回自己想要的数据列,少用select *