MySQL索引

什么是索引?

 

索引是帮助MySQL高效获取数据的排好序的数据结构

 

 常见的索引的类型:

  • UNIQUE(唯一索引):不可以出现相同的值,可以有NULL值
  • INDEX(普通索引):最基本的索引,没有任何限制 经常用到
  • PROMARY KEY(主键索引):不允许出现相同的值
  • FULLTEXT(全文索引):可以针对值中的某个单词,但效率确实不敢恭维
  • 组合索引:实质上是将多个字段建到一个索引里,列值的组合必须唯一

 

索引数据结构红黑树,hash,B+树详解

二叉树

有点像链表(右边为大左边为小)

 

红黑树

优点:单边超过两个会自动做平衡(也叫平衡二叉树)查询效率更高

缺点:树的深度高度(数据量大要查叶子节点数据从根节点开始查询比较慢)

解决方案: 一个根节点存储更多的索引元素,横向扩展(也就是B树)

 

B树

优点:控制树的高度 解决红黑树的缺点

缺点:根节点也存储数据,占用内存空间横向扩展有限 可以在优化

 

B+数(B树的变种,MySQL开发人员进行的改造)

优点:MySQL跟节点默认大小16KB,所以只有叶子节点存储数据(增加根节点的横向扩展且不占内存空间)。每个叶子节点都是一组小二叉树(也可以理解为多叉树)。

hash:支持哈希计算(叶子节点指针,缺点是小于条件查询不好使)。两千多万数据大概只需三层树结构

 

索引时怎么支撑千万级表的快速查找

MySQL默认索引底层结构用的B+树

B+ 树根节点默认大小16KB,只有叶子节点存储数据。粗略计算两千多万数据只需要三层树结构

 

如何基于索引B+树精准建立高性能索引

MySQL表存储在磁盘上的路径在MySQL安装目录里data文件夹里

myisam:磁盘存储(.frm 表结构.myd表数据 .myi表索引)

非聚集索引(索引和数据分开)。

索引结构B+树

 

innodb:磁盘存储(.frm 表结构.ibd表数据和索引)

聚集索引(索引和数据在一起)。

ID主键建议整形自增 :因为B+ 数比较查询 整形比较方便,占用空间也比UUID小。

自增从小到大,从左到右利于叶子节点查询。

 

联合索引底层数据结构又是怎样的

 

多个字段建立统一索引。优先级是从左到右最常用的放在第一位一次向后

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值