Index

作者: 神农架村姑 | 来源:发表于2019-10-12 09:55 被阅读0次

https://zhuanlan.zhihu.com/p/23624390
https://zhuanlan.zhihu.com/p/57359378
https://zhuanlan.zhihu.com/p/78982303

索引的数据结构

如果给表上了主键,那么表在磁盘上的存储结构就由堆状结构变成了树状结构,整个表就变成了一个索引。索引的结构顺序就是表中records的结构顺序。所以一个表只能有一个主键, 一个表只能有一个「聚集索引」

其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。 假如我们执行一个SQL语句:

select * from table where id = 1256;

首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。



索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

非聚集索引

非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。叫做回表

覆盖索引

不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径。

然而, 有一种例外可以不使用聚集索引就能查询出所需要的数据, 这种非主流的方法 称之为「覆盖索引」查询。

CREATE INDEX index_name on Table (key1, key2);
SELECT key2 FROM Table WHERE key1 = 值


联合索引/复合索引/多字段索引

最左前缀匹配原则 Left-Prefix Index Rule

联合索引中的字段,只有某个字段左边的所有字段都被使用了,才能使用该字段上的索引。如,有索引INDEX idx_i1(col_a, col_b),如果查询条件为where col_b = 1,则无法使用索引idx_i1。

联合索引中的字段,即使某个字段右边的其他字段没有被使用,该字段之前的所有字段仍然可以正常使用索引。例如,有索引INDEX idx_i2(col_a, col_b, col_c),则查询条件where col_a = 1 and col_b = 2在字段col_a和col_b上仍然可以走索引。

最左前缀匹配原则的含义:对于一个联合索引,如果有一个SQL查询语句需要执行,则只有从索引最左边的第一个字段开始到SQL语句查询条件中不包含的字段(不含)或范围条件字段(含)为止的部分才会使用索引进行加速。

Hash索引和B+ Tree索引的区别?

有什么手段可以知道有没有走索引查询?

可以通过explain查看sql语句的执行计划,通过执行计划来分析索引使用情况

什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?

查询优化器 一条SQL语句的查询,可以有不同的执行方案,至于最终选择哪种方案,需要通过优化器进行选择,选择执行成本最低的方案。 在一条单表查询语句真正执行之前,MySQL的查询优化器会找出执行该语句所有可能使用的方案,对比之后找出成本最低的方案。这个成本最低的方案就是所谓的执行计划。 优化过程大致如下: 1、根据搜索条件,找出所有可能使用的索引 2、计算全表扫描的代价 3、计算使用不同索引执行查询的代价 4、对比各种执行方案的代价,找出成本最低的那一个

相关文章

  • 【Elasticsearch】index [index] blo

    ES保存是报标题错误,大致意思是ES只允许读,不允许写。 1、排查问题 ES环境是通过docker部署,先找到es...

  • index

    In a land where no magic is present. A land where the str...

  • index

    selfindex A AngularJS-V1 系列Apache Tomcat 系列Appium 系列 B Ba...

  • Index

    唯一索引(UNIQUE):每一行的索引值都是唯一的(创建了唯一约束,系统将自动创建唯一索引) 主键索引:当创建表时...

  • INDEX

    本文集拟为治疗长时间碎片化阅读造成的知识体系和阅读能力退化而设。主要记录看过的书籍(包括专业书籍)的摘抄,体系,感...

  • index

    学院派黑客是我瞎起的名字。在我的定义里学院派黑客是一群经受过高等教育具有良好CS素养但是对现有教育体系和学术氛围嗤...

  • Index

    Index 是为了加速查询的速度,它是储存在数据库中的实实在在的数据结构。通过 Index 可以快速定位到数据库中...

  • index

    0 intro 0.1 type of pages sql server divides space(storag...

  • Index

    Mark#LinkDifficultyFrequency-3Longest Substring Without R...

  • Index

    1.4.1 Basic Slicing and Indexing 说明:元组索引其实就是方括号里添加索引 可以引发...

网友评论

      本文标题:Index

      本文链接:https://www.haomeiwen.com/subject/xymfmctx.html