• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Mysql索引常见问题汇总

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

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

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

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

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

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

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

    Q3:B tree和B+ tree应用场景:

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

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

    Q4:B+ tree对比B tree的优点

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

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

    A key_part specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

    根据Mysql文档的说明,创建索引的时候,可以加上asc或者desc,例如:add index idx(a asc,b desc).但是实际Mysql是会忽略的(好坑。。。)好像8.0版本之后支持desc了。

    这会有什么影响呢?

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

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

    explain select * from table order by test1 ,test2 limit 1;

    可以使用索引的排序:

    不可以使用索引的排序:

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

    以上就是Mysql索引常见问题汇总的详细内容,更多关于MySQL 索引的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • Mysql 索引结构直观图解介绍
    • 为什么MySQL数据库索引选择使用B+树?
    • 获取 MySQL innodb B+tree 的高度的方法
    • Mysql中索引和约束的示例语句
    • MySql范围查找时索引不生效问题的原因分析
    • MySql如何查看索引并实现优化
    • MySQL 8.0 之索引跳跃扫描(Index Skip Scan)
    • MySQL如何基于Explain关键字优化索引功能
    • MySQL用B+树作为索引结构有什么好处
    上一篇:node连接mysql数据库遇到的问题和解决方案
    下一篇:关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Mysql索引常见问题汇总 Mysql,索引,常见问题,汇总,