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;
可以使用索引的排序:
- order by test1
- order by test1 desc
- order by test1,test2
- order by test1 desc,test2 desc
不可以使用索引的排序:
- order by test1,test2,desc
- order by test1 desc,test2
因为索引不支持desc,所以多列的索引是按全部列的升序存储的。所以只排序一列,全部列升序,全部列降序,都能用索引。但是第一列用升序,第二列用降序,或者第一列降序,第二列用升级,都不能使用索引。
以上就是Mysql索引常见问题汇总的详细内容,更多关于MySQL 索引的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 试音宝典《试机四十号K2HD》[低速原抓WAV+CUE]
- 【原神】V5.2攻略 | 暴击爆伤配比 怎样伤害最大化?
- 【原神】V5.2攻略 | 全火元素5星角色·一图流培养
- 【原神】盘点《原神》容易被玩家忽略的大佬角色,很多玩家都不愿意抽他们
- 李玉刚.2017-刚好遇见你【玉泽东方】【WAV+CUE】
- 温拿乐队.1992-永远的记忆【宝丽金】【WAV+CUE】
- 群星.1996-风月电影原声带【滚石】【WAV+CUE】
- Blast Slam S1参赛名单出炉:XG被直邀
- 《英雄联盟》Doinb想让Tian当教练:世纪大和解?
- 《忆蚀》Subliminal:揭秘后室之谜,路知行献声Weplay文化展
- 那英《征服NEWXRCD台湾版》日本压制[WAV+CUE]
- 群星《金曲百分百上》3CD(香港版)[WAV+CUE]
- 刘欢《雨中的树(新歌加精选)2CD》德国HD24K金碟[WAV+CUE]
- 郑源 《世间情歌》6N纯银SQCD[WAV+CUE][1G]
- 群星《粤潮2HQII》头版限量编号[低速原抓WAV+CUE][991M]