Mysql索引简单介绍
2019-10-08 本文已影响0人
躺在家里干活
索引:存储引擎快速找到记录的一种数据结构。
- 数据量越大,索引对性能的影响越重要
- 索引并不是越多越好
索引脑图
数据库索引基础B-Tree索引
存储结构
索引的存储结构B-Tree中的数据都是有序的,所以索引才能加快访问速度。
图中的key1是指所有的索引列的值
索引之所以能够加快访问数据的速度,是因为存储引擎不需要进行全表扫描来获取需要的数据,而是从根结点(上图未体现)开始进行搜索。通过比较节点页的值(使用哪一列构建的索引,这个值就是什么,主键索引中值是我们的主键)的上限和下限,找到下层子节点,最终找到数据,或者确认数据不存在。
哈希索引
哈希索引就类似于HashMap,是使用所有索引列计算出一个哈希码,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。
特点
- 哈希索引只包含哈希值和行指针(数据的存储位置)
- 不是按照索引值顺序存储的,所以就无法用于排序
- 适合使用 =,IN (), <=>的操作
- 访问哈希索引的数据非常快,除非有很多哈希冲突
正确创建和使用索引
- 使用前缀索引,如果一个列过长,如果直接创建索引,会非常大,也会慢。所以可以选取这个列开始的部分字符,做为索引列,但是部分字符的选择要适当,要能完整的体现原列在整个数据库中所占的比例。
- where条件中使用独立的列,如
where age+1 = 15
。“独立的列”指索引列不能是表达式的一部分,也不能是函数的参数 - 不要为每个列创建独立的索引,如果有查询需求,要使用多列索引,并且选择合适的索引列顺序
- 如果二级索引(非聚簇索引)的索引列可以完全覆盖到需要查询的列,那么这个索引就是覆盖索引,这样的索引可以提高查询效率,因为不需要再根据主键去读取数据。