MySQL索引的数据结构怎么选?

  日常工作中,SQL查询效率比较低的时候,我们想到的第一个解决方案就是增加索引,那什么是索引?索引有哪些数据结构?索引是怎样工作的?我们来一一剖析.
一.什么是索引?
  精炼成一句话:索引是为了加快查询效率的排好序的数据结构.这句话有几个重点,首先,索引的作用是为了加快查询效率,其次,索引是一种数据结构,而且是排好序的数据结构.
二.索引有哪些数据结构?
MySQL主要提供的是hash,B+TREE,我们主要使用的是B+TREE,它们的特性如下:
hash: 以键值对存储的数据结构,用hash函数将key换算成一个确切的位置,然后把value放在数据的这个位置上,如果出现hash冲突,那就在这个位置上拉出一个链表.用hash做索引的一个好处就是查询效率特别高,但缺点也同样明显,就是只能做等值查询,例如Memcached及其他一些NoSQL引擎.
搜索树: 最基础的搜索树就是二叉树了,它的特点是:每个节点的左儿子节点小于父节点,父节点又小于右儿子节点.它的查询效率是非常高的(类似于二分法查找,每次过滤一半),维持这个平衡二叉树的时间复杂度也是O(log(N)).既然有二叉树,那么也可以有多叉树,多叉树就是每个节点有多个儿子,儿子之间的大小保证从左到右递增,数据库并不使用二叉树做数据存储,原因是索引不止存在内存中,还要写到磁盘上. 二叉树的数据存储量是随着树高的增加而增加的,在数据为100万的时候我们的树高就达到20了,这样一次数据查询就可能需要访问20个数据块,而在机械硬盘上,从磁盘随机读一个数据块大概需要10ms,这样的查询效率是非常低的.**为了让一个查询尽量少读磁盘,就必须让查询过程访问尽量少的数据块.**那么我们就不应该使用二叉树,而是要使用"N叉树".以InnoDB的一个整数字段索引为例,这个N差不多是1200,当树高是3的时候,就可以存1200的3次方个值,就是17亿了.考虑到树根的数据块总是在内存中的,一个10亿行的表上一个整数字段索引,查找一个值最多只需要访问3次磁盘,其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了.

`
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值