当前位置: 代码迷 >> 综合 >> MySQL数据库索引知识点总结
  详细解决方案

MySQL数据库索引知识点总结

热度:73   发布时间:2024-03-10 02:12:09.0

1.MySQL数据库索引都有哪些数据结构
B+和HASH

2.聊下hash
hash查询是把key通过hash生成下标然后获取对应的值,它的主要特点是快速精确查询,但是不支持范围查询。如果要是做成索引,速度是很慢的,要全部扫描。

3.hash表在那些场景比较适合
等值查询的场景,就只有KV(Key,Value)的情况,例如Redis、Memcached等这些NoSQL的中间件。
有序数组,它在等值查询的和范围查询的时候都很Nice。
有序的适合静态数据,因为如果我们新增、删除、修改数据的时候就会改变他的结构。?如你新增?个,那在你新增的位置后?所有的节点都会后移,成本很?。
可以?来做静态存储引擎啊,?来保存静态数据,例如你2019年的?付宝账单,2019年的淘宝购物记录等等都是很合适的,都是不会变动的历史数据。

4.聊下二叉树
在这里插入图片描述

?叉树是有序的,所以是?持范围查询的。
但是他的时间复杂度是O(log(N)),为了维持这个时间复杂度,更新的时间复杂度也得是O(log(N)),那就得保持这棵树是完全平衡?叉树了。
但是随着数据的增长,数就会变得很高,查询的成本就会随者树的增高而增加。

5.B树
在这里插入图片描述

在同样的元素下,B树要比完全平衡的二叉树还要“矮”,因为B树的同一个节点可以存储多个元素。

B+树
在这里插入图片描述同样的元素,B+树的表示要?B树要“胖”,原因在于B+树中的?叶?节点会冗余?份在叶
?节点中,并且叶?节点之间?指针相连。
B+树是B树的升级版,只是把?叶?节点冗余?下,这么做的好处是为了提?范围查找的效率
提?了的原因也??是会有指针指向下?个节点的叶?节点,B+树?的元素也是有序的。

总结
1.最左前缀匹配原则。MySQL会?直向右匹配直到遇到范围查询 (>,<,BETWEEN,LIKE)就停?匹配。
2.尽量选择区分度?的列作为索引,区分度的公式是 COUNT(DISTINCT col)/COUNT(*)。表示字段不重复的?率,?率越?我们扫描的记录数就越少。
3.索引列不能参与计算,尽量保持列“?净”。?如, FROM_UNIXTIME(create_time)='2016-06-06’就不能使?索引,原因很简单,B+树中存储的都是数据表中的字段值,但是进?检索时,需要把所有元素都应?函数才能?较,显然这样的代价太?。所以语句要写成 :create_time=UNIX_TIMESTAMP(‘2016-06-06’)。
4.尽可能的扩展索引,不要新建?索引。?如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
5.单个多列组合索引和多个单列索引的检索查询效果不同,因为在执?SQL时,MySQL只能使??个索引,会从多个单列索引中选择?个限制最为严格的索引。 “合并索引”策略简单来讲,就是使?多个单列索引,然后将这些结果?“union或者and”来合并起来

  相关解决方案