本文将从高性能角度,简单讲解一下MySQL表的设计跟索引。
1 表设计
![](https://img.haomeiwen.com/i3763302/24447ead8f0daf76.png)
总体原则是遵循范式设计,但是有时候为了性能,可以采用一些反范式的设计,以空间换时间。
另外,这部分的最后给出了高性能表设计遵循的3个基本原则。
2 索引
2.1 原理
索引是存储引擎用于快速查询记录的一种数据结构。可以加速查询,但是也降低了索引列插入、删除、更新的速度,索引维护需要代价
索引有hash索引、二分查找索引、B+Tree, 在MySQL中,常用的是B+Tree。
B+Tree 能够快速访问数据,是因为存储引擎不再需要全表扫描,而是从索引根节点(通常在内存中)开始进行多分查找,根节点的槽中都存放了指向子节点的指针,存储引擎根据这些指针能够快速遍历数据。
B+Tree的原理 可以参见这篇文章: https://blog.csdn.net/u013235478/article/details/50625677
2.2 分类
![](https://img.haomeiwen.com/i3763302/aec2c39995d91f7e.png)
2.3 索引选择的几个参考指标
![](https://img.haomeiwen.com/i3763302/e1dba0661c52bee9.png)
2.3 排查
![](https://img.haomeiwen.com/i3763302/637c23feb3b58efa.png)
2.4 索引失效
![](https://img.haomeiwen.com/i3763302/3d5a5ff134ea3278.png)
3 总结
本文讲解了高性能表设计的原则,以及索引相关的知识。索引主要从原理、排查、选择因素、bad case 四个维度进行了简单分析。
文中的脑图是我在梳理过程中制作。
4 参考文献
B+ Tree的原理: https://blog.csdn.net/u013235478/article/details/50625677
拉勾网的《高性能MySQL实战》
使用explain 查看执行计划:https://blog.csdn.net/why15732625998/article/details/80388236
5 其他
本文是mysql学习的第三篇-简述mysql 中高性能表设计原则与索引,希望对你有所帮助~
如果有疑问,可以直接留言,也可以关注公众号 “链人成长chainerup” 提问留言,或者加入知识星球“链人成长” 与我深度链接~
网友评论