码迷,mamicode.com
首页 > 数据库 > 详细

MySQL--索引

时间:2021-06-11 18:19:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:bsp   hash   family   数据结构   修改   就是   散列   style   取出   

 

1. 索引是什么?有什么作用?使用索引的优缺点?

索引是一种用于快速查询和检索数据数据结构。常见的索引结构有: B 树, B+树和 Hash索引

优点:

  1. 使用索引可以大大加快数据的检索速度。
  2. 通过唯一性索引,可以保证数据库表中每一行数据的唯一性。

缺点:

  1. 创建索引和维护索引需要耗费很多时间,当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
  2. 索引需要物理文件存储,也会耗费一定的空间。

2. MySQL索引底层的实现原理?

 常见的索引结构有Hash索引、B- Tree 索引和B+ Tree索引。MySQL索引底层采用的数据结构是B+ Tree为什么不使用Hash索引和B- Tree索引呢?


 首先我们我们看一Hash索引:

  哈希索引是基于哈希表实现的,哈希表是键值对的集合,通过键(key)即可快速取出对应的值(value),因此哈希表可以快速检索数据(接近 O1)。 为何能够通过 key 快速取出 value呢?原因在于 哈希算法(也叫散列算法)。通过哈希算法,我们可以快速找到 value 对应的 index,找到了 index 也就找到了对应的 value哈希算法有个 Hash 冲突 问题,也就是说多个不同的 key 最后得到的 index 相同。通常情况下,我们常用的解决办法是 链地址法。链地址法就是将哈希冲突数据存放在链表中。JDK1.8 之前 HashMap 就是通过链地址法来解决哈希冲突的。不过,JDK1.8 以后HashMap为了减少链表过长的时候搜索时间过长引入了红黑树。

既然哈希表能够进行快速索引,为什么MySQL没有把它当做数据结构呢?主要有以下两个原因:

  1. 哈希冲突问题
  2. 哈希索引不支持顺序和范围查询

 未完待续...

MySQL--索引

标签:bsp   hash   family   数据结构   修改   就是   散列   style   取出   

原文地址:https://www.cnblogs.com/sinlearn/p/14873031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!