优点:
使用索引可以大大加快数据的检索速度。 通过唯一性索引,可以保证数据库表中每一行数据的唯一性。缺点:
创建索引和维护索引需要耗费很多时间,当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。 索引需要物理文件存储,也会耗费一定的空间。2. MySQL 索引底层的实现原理?
常见的索引结构有 Hash 索引、 B- Tree 索引和 B+ Tree 索引。 MySQL 索引底层采用的数据结构是 B+ Tree 。 为什么不使用 Hash 索引和 B- Tree 索引呢?
首先我们我们看一 Hash 索引:
哈希 索引是基于哈希表实现的,哈希表 是键值对的集合,通过键 (key) 即可快速取出对应的值 (value) ,因此哈希表可以快速检索数据(接近 O ( 1 ) )。 为何能够通过 key 快速取出 value 呢?原因在于 哈希算法(也叫散列算法)。通过哈希算法,我们可以快速找到 value 对应的 index ,找到了 index 也就找到了对应的 value 。 哈希算法有个 Hash 冲突 问题,也就是说多个不同的 key 最后得到的 index 相同。通常情况下,我们常用的解决办法是 链地址法 。链地址法就是将哈希冲突数据存放在链表中。 JDK1.8 之前 HashMap 就是通过链地址法来解决哈希冲突的。不过, JDK1.8 以后 HashMap 为了减少链表过长的时候搜索时间过长引入了红黑树。
既然哈希表能够进行快速索引,为什么 MySQL 没有把它当做数据结构呢?主要有以下两个原因:
哈希冲突问题 ; 哈希索引不支持顺序和范围查询未完待续...
MySQL--索引
标签:bsp hash family 数据结构 修改 就是 散列 style 取出