mysql函数和索引冲突问题_Mysql索引常见问题汇总
Q1:数据库有哪些索引?优缺点是什么?
1.B树索引:⼤多数数据库采⽤的索引(innoDB采⽤的是b+树)。能够加快访问数据的速度,尤其是范围数据的查⾮常快。缺点是只能从索引的最左列开始查,也不能跳过索引中的列,如果查询中有某个列⽤到了范围查询,则右边所有列都⽆法使⽤索引优化查。
2.哈希索引:基于哈希表实现。在MySQL中,只有Memory引擎显式的⽀持哈希搜索。哈希查的速度⾮常快,但哈希索引只包含哈希值和⾏指针,不存储字段值,所以不能⽤索引中的值来避免读取⾏,也不能进⾏排序。由于哈希索引使⽤的是索引列的全部内容来计算哈希值的,所以不⽀持部分所有列匹配查。哈希只⽀持等值⽐较,不⽀持任何范围查询。⼀旦哈希冲突很多的话,维护成本⾮常⾼。innoDB⽀持“⾃适应哈希索引”(adaptive hash index)。
writeprocessmemory被禁止mysql面试题汇总3.全⽂索引:全⽂索引是⼀种特殊类型的索引,它查的是⽂本中的关键字,⽽不是⽐较索引的值。最初只能在MyISAM上使⽤,5.6.24以后innoDB也⽀持了全⽂索引。全⽂索引的查询要使⽤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。手机json文件解析器
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 索引的资料请关注脚本之家其它相关
⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论