本文主要解释“MySql支持哪些索引类型”。本文的解释简单明了,易学易懂。请跟随边肖的思路,一起研究学习“MySql支持哪些索引类型”!
一、什么是索引?
官方解释:Index是一种帮助MySQL高效获取数据的数据结构。
通俗理解:Index是一个特殊的文件(InnoDB数据表上的索引是表空间不可分割的一部分),其中包含指向数据表中所有记录的引用指针。
二、索引可以做什么?
首先,指数不是万能的,索引可以加快数据检索操作,但它会减缓数据修改操作。每次修改数据记录时,都必须刷新索引。为了在一定程度上弥补这个缺陷,很多SQL命令都有一个DELAY_KEY_WRITE项。此选项的功能是在每个新记录和每个现有记录被此命令修改后,暂时停止MySQL立即刷新索引。索引的刷新将等到插入/修改所有记录。当一个数据表中需要插入很多新记录时,DELAY_KEY_WRITE选项的作用会非常明显。
三、为什么使用数据索引能提高效率?
数据索引存储有序。
在有序的情况下,没有必要遍历索引记录来通过索引查询一条数据。
极端情况下,数据索引的查询效率为二分法查询效率,接近log2(N)。
四、MySQL支持哪些索引类型?
我们这里提到的索引类型不是指“主键索引”和“外键索引”,而是指索引底部的数据结构。MySQL的索引数据结构支持以下两种:
b树索引。b树是一种平衡的多分支树。根节点到每个叶节点的高度差小于1,同级节点之间用指针链接,有序,如下图所示:
哈希索引。索引是使用某种哈希算法将键值转换成新的哈希值。搜索时,不需要像B树那样从根节点到叶节点逐级搜索。您只需要一次哈希算法,这是无序的,如下图所示:
不支持范围查询。
不支持索引完成排序。
不支持联邦索引最左边的前缀匹配规则。
哈希索引的优点:等价查询和哈希索引有绝对的优势(前提是没有大量的重复键值,如果有大量的重复键值,哈希索引的效率很低,因为存在所谓的哈希冲突问题。)
当指数不适用时:
五、什么情况下应不建或少建索引?
我们都知道什么时候应该使用索引,那么什么时候不应该使用索引呢?就像我们上面说的,指数不是万能的,所以指数肯定有一些不适用的场景。在以下场景中,我们应该尽量不构建或构建较少的索引:
记录太少了。
频繁插入、删除和修改的表。
对于数据重复且平均分布的表字段,如果一个表有10万行记录,而有一个字段A只有T和F两个值,且每个值的分布概率约为50%,那么索引这个表A字段一般不会提高数据库的查询速度。
经常与主字段一起查询但主字段的索引值较多的表字段。
六、什么是联合索引?
联合索引是两列或多列上的索引。对于联邦索引,MySQL支持从左到右使用索引中的字段。查询只能使用索引的一部分,但只能使用最左边的部分。比如索引是关键索引(A、B、C),可以支持A、A、B、A、B、C三种组合进行搜索,但不能支持B、C,当最左边的字段是常量引用时,索引非常有效。
通过索引中的附加列,您可以缩小搜索范围,但是使用包含两列的索引不同于使用两个单独的索引。
综合指数的结构类似于电话簿,其中姓名由姓氏和名字组成。电话簿首先按姓氏对同名同姓的人进行排序,然后按名字对同名同姓的人进行排序。如果知道姓氏,电话簿会很有用;如果你知道名字和姓氏,电话簿更有用,但是如果你只知道名字而不知道姓氏,电话簿就没用了。
00-1010b磁盘读写成本更低。B的内部节点没有指向关闭。
键字具体信息的指针,因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
B+-tree的查询效率更加稳定。由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
感谢各位的阅读,以上就是“MySql支持哪些索引类型”的内容了,经过本文的学习后,相信大家对MySql支持哪些索引类型这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133545.html