Mysql索引简单介绍

2019-10-08  本文已影响0人  躺在家里干活

索引:存储引擎快速找到记录的一种数据结构。

  • 数据量越大,索引对性能的影响越重要
  • 索引并不是越多越好

索引脑图

数据库索引基础

B-Tree索引

存储结构

索引的存储结构

B-Tree中的数据都是有序的,所以索引才能加快访问速度。
图中的key1是指所有的索引列的值

索引之所以能够加快访问数据的速度,是因为存储引擎不需要进行全表扫描来获取需要的数据,而是从根结点(上图未体现)开始进行搜索。通过比较节点页的值(使用哪一列构建的索引,这个值就是什么,主键索引中值是我们的主键)的上限和下限,找到下层子节点,最终找到数据,或者确认数据不存在。

哈希索引

哈希索引就类似于HashMap,是使用所有索引列计算出一个哈希码,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

特点

  1. 哈希索引只包含哈希值和行指针(数据的存储位置)
  2. 不是按照索引值顺序存储的,所以就无法用于排序
  3. 适合使用 =,IN (), <=>的操作
  4. 访问哈希索引的数据非常快,除非有很多哈希冲突

正确创建和使用索引

  1. 使用前缀索引,如果一个列过长,如果直接创建索引,会非常大,也会慢。所以可以选取这个列开始的部分字符,做为索引列,但是部分字符的选择要适当,要能完整的体现原列在整个数据库中所占的比例。
  2. where条件中使用独立的列,如where age+1 = 15。“独立的列”指索引列不能是表达式的一部分,也不能是函数的参数
  3. 不要为每个列创建独立的索引,如果有查询需求,要使用多列索引,并且选择合适的索引列顺序
  4. 如果二级索引(非聚簇索引)的索引列可以完全覆盖到需要查询的列,那么这个索引就是覆盖索引,这样的索引可以提高查询效率,因为不需要再根据主键去读取数据。

我的个人博客,有空来坐坐

上一篇下一篇

猜你喜欢

热点阅读