什么是索引?
索引是帮助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小。
自增从小到大,从左到右利于叶子节点查询。
联合索引底层数据结构又是怎样的
多个字段建立统一索引。优先级是从左到右最常用的放在第一位一次向后