原创

数据库索引

07.21自我总结

数据库索引

1.什么是索引?

即搜索引导,索引是一个特殊的数据结构,其存储的关键信息与详细信息的位置对应关系,加速索引 索引的影响:

- 正确使用索引才能加速查询; - 索引需要额外的占用数据空间; - 索引的加入,使数据的crud变慢

索引的应用场景: ​ 查询操作较多,写入较少;本质原理是尽可能减小搜索范围

2.磁盘IO

数据库的数据最终存储到了硬盘上,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page) 索引的目的:尽可能减低io次数,算法支持:二分查找法,应该尽可能的将数据量小的字段作为索引

3.索引数据结构

b+树 ​ 在b+树中 叶子节点才是存储真实数据的,叶子数量越多,树的层级越高,导致IO次数增加 ​ 要避免这个问题,在叶子节点中尽可能的存储更多的数据, 应该将数据量小的字段作为索引

最左匹配原则

当b+树的数据项是复合的数据结构,b+树会按照从左到右的顺序来建立搜索树,也就是说根据sql语句由左至右顺序写入的搜索字段,会优先搜索最左边的字段条件,再匹配下一个字段条件,即索引的最左匹配特性.

聚集索引

聚集索引中包含了所有字段的值,如果拟制定了主键,主键就是聚集索引;

如果没有则找一个非空且唯一的字段作为聚集索引;

如果也没有这样的列,innoDB会在表内自动产生一个聚集索引id,它是自增的

聚集索引中存储了所有的数据

辅助索引

除了聚集索引之外的索引都称之为辅助索引或第二索引,包括 foreign key 与 unique 辅助索引的特点:

其叶子节点保存的是索引数据与所在行的主键值,InnoDB用这个 主键值来从聚集索引中搜查找数据

覆盖查询

覆盖索引指的是需要的数据仅在辅助索引中就能找到:

回表查询

如果要查找的数据在辅助索引中不存在,则需要回到聚集索引中查找,这种现象称之为回表

也就是说搜索字段为非索引字段时,查询搜索字段数据时,先根据索引字段获取主键值,在根据主键值搜索查询的字段.

小结:(判断数据查询的快慢其实是如何正确使用索引)

#为表中某个字段添加索引
create index index_name on table_name(column);
# index_name表示索引名
# table_name表示表名
# column表示字段名
​
#添加主键
alter table table_name add primary key(column);
  • 使用占用空间最小的字段来作为索引;
  • 不要再一行中存储太多的数据,例如小说,视频,如果字段太多可以分表 ;
  • 尽量使用覆盖查询 ;
  • 如果字段区分度低(重复度高),建立索引是没有意义,反过来说应该将区分度高的字段作为索引
  • 不要再等号的左边做运算,例如:select count( ) from usr where id 3 = 6; 也会遍历所有记录
  • 模糊匹配中,%尽量不要写在前面
  • and语句中会自动找一个具的字段优先执行,所以我们应该在and语句中至少包含一个具备索引的字段
  • or语句要避免使用,如果要用则保证所有字段都有索引才能加速
  • 联合索引中,顺序应该将区分度最高的放到左边,最低的放右边

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库索引

    即搜索引导,索引是一个特殊的数据结构,其存储的关键信息与详细信息的位置对应关系,加速索引

    小小咸鱼YwY
  • 力扣题目解答自我总结(反转类题目)

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

    小小咸鱼YwY
  • 力扣题目汇总(两数之和Ⅱ-输入有序数组,删除排序数组中的重复项,验证回文串)

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

    小小咸鱼YwY
  • 如何理解并正确使用MySql索引

    索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,本文主要介绍在MySql数据库中索引类型,以及如何创建出更加合...

    数据和云
  • 索引的基本语法

    索引是排好序的数据结构!可以用在 where 条件查找的字段,和order by 排序的字段,有了索引,便可以快速地定位数据所在的物理地址并找出来。

    技能锦囊
  • 浅谈Mysql索引

    我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询,直到查询到符合的数据,这样也会导致一个问题:如果...

    逆月翎
  • 面试官出的 MySQL 索引的问题,这篇文章全给你解决!

    这篇文章会讲解索引的基础知识,但主要是关于MySQL数据库的B+树索引的相关原理,里面的一些知识都参考了MySQL技术内幕这本书,也算对于这些知识的总结。对于B...

    好好学java
  • 索引的基本语法

    索引是排好序的数据结构!可以用在 where 条件查找的字段,和order by 排序的字段,有了索引,便可以快速地定位数据所在的物理地址并找出来。

    技能锦囊
  • 【DB笔试面试352】什么是不可用索引(Unusable Indexes),哪些操作会导致索引变为不可用即失效状态?

    在Oracle数据库中,什么是不可用索引(Unusable Indexes),哪些操作会导致索引变为不可用(unusable)即失效状态?

    小麦苗DBA宝典
  • 索引 与 索引数据结构

    B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构。B+Tree与B-Tree的结构很像,但是也有几个自己的特性:

    郭大侠

扫码关注云+社区

领取腾讯云代金券