Mysql索引有哪些常见的问题

  介绍

本篇文章为大家展示了Mysql索引有哪些常见的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> Q1:数据库有哪些索引?优缺点是什么?

1. b树索引:大多数数据库采用的索引(innoDB采用的是b +树)。能够加快访问数据的速度,尤其是范围数据的查找非常快。缺点是只能从索引的最左列开始查找,也不能跳过索引中的列,如果查询中有某个列用到了范围查询,则右边所有列都无法使用索引优化查找。

2。哈希索引:基于哈希表实现。在MySQL中,只有记忆引擎显式的支持哈希搜索。哈希查找的速度非常快,但哈希索引只包含哈希值和行指针,不存储字段值,所以不能用索引中的值来避免读取行,也不能进行排序。由于哈希索引使用的是索引列的全部内容来计算哈希值的,所以不支持部分所有列匹配查找。哈希只支持等值比较,不支持任何范围查询。一旦哈希冲突很多的话,维护成本非常高.innoDB支持“自适应哈希索引”(自适应哈希索引).

3 .全文索引:全文索引是一种特殊类型的索引,它查找的是文本中的关键字,而不是比较索引的值。最初只能在MyISAM上使用,5.6.24以后innoDB也支持了全文索引。全文索引的查询要使....反对用匹配,在相同的列上同时创建全文搜索和基于值的b - tree索引不会有冲突。

4。空间数据索引(R - tree索引),MyISAM支持R树索引,好处是无需前缀查询,会从所有纬度来索引数据,可以用作地理数据的存储;缺点是必须使用MySQL的GIS相关函数如MBRCONTAINS()等来维护数据,但由于MySQL中的GIS并不完善,因此大多数人不会使用这个特性。

<强> Q2:为什么不实用二叉查找树或者红黑树作为数据库索引。

二叉树在处理海量数据时,树的高度太高,虽然索引效率很高,达到logN,但会进行大量磁盘io,得不偿失。而且删除或者插入数据可能导致数据结构改变变成链表,需要增进平衡算法。而红黑树,插入删除元素的时候会进行频繁的变色和旋转(左旋,右旋),很浪费时间。但是当数据量很小的时候,完全可以放入红黑树中,此时红黑树的时间复杂性比b树低。因此,综上考虑,数据库最后选择了b树作为索引。

<强>第三季:b树和b +树应用场景:

1. b树常用于文件系统,和少部分数据库索引,比如mongoDB。

2。B +树主要用于mysql数据库索引。

<强>第四季度:B +树对比B树的优点

B树的每个节点除了存储指向子节点的索引外,还要存储数据域,因此单一节点指向子节点的索引并不是很多,树的高度较高,磁盘io次数较多。B +树的高度更低,且所都有数据存储在叶子节点,叶子节点都处于同一层,因此查询性能稳定,便于范围查找。

<强> Q5:多列排序时使用索引的坑

key_part规范可以以ASC或DESC结束。这些关键字允许未来扩展用于指定升序或降序索引值存储。目前,他们正在解析但忽略;索引值总是存储在升序排序。

根据Mysql文档的说明,创建索引的时候,可以加上asc或者desc,例如:<代码>添加索引idx (asc, b desc)>

这会有什么影响呢?

假如有列test1和test2,都是int类型。

我们创建索引“idx1 (test1, test2),
假如我们要按test1和test2排序,例如SQL

解释从表的顺序选择* test1, test2限制1;

可以使用索引的排序:

    <李>命令test1李 <李>命令test1 desc李 <李> order by test1, test2李 <李>订单由test1 desc test2 desc
      李,

不可以使用索引的排序:

    <李> order by test1, test2, desc李 <李>命令test1 desc, test2
      李,

因为索引不支持desc,所以多列的索引是按全部列的升序存储的,所以只排序一列,全部列升序,全部列降序,都能用索引。但是第一列用升序,第二列用降序,或者第一列降序,第二列用升级,都不能使用索引。

上述内容就是Mysql索引有哪些常见的问题,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Mysql索引有哪些常见的问题