MYSQL官方文档。
索引数据结构:
二叉树
索引要减少IO的次数
数据结构一个非常好用的网站:
Data Structure Visualization (usfca.edu)
二叉树可能会退化为链表。
红黑树的高度,可能会很高。
B+树的高度
在内存里面做计算要比一次IO快的多。
一个h=3的B+树,一个节点16kb ,一个节点能放1170个索引。
bigint=8B 指针在MySQL底层源码开辟的是6B。
B+树能在树很低的情况下,存大量的索引。
磁盘IO与内存计算差别很大。
MySAM等存储引擎都是形容数据库表级别的。
.frm框架
MYI放的是表的索引,用B+树构建的索引数据结构。B+树的叶子结点存储的信息是索引所在行的磁盘文件地址。获取这个地址后去另外一个文件MYD中快速地定位到这一行。
不同的存储引擎,存储结构不一样
.ibd文件 index 和 database
MySAM主键索引
聚集索引遍历快。
下图是回表操作:
主键是UUID是什么意思? ROWID
InnoDB可以不建主键,但是MySQL底层会帮你做一件事情,他会先找一列可以作为索引的数据,充当索引,然后构建B+树,但是如果没有找到的话,他会默默地做一个rowId充当索引。所以,还是建议你自检建主键。
MySQL的DB资源是非常宝贵的,让数据库去建主键是不合理的。
整形比大小比字符串比大小快。整形的大小比uuid小。
自增的MySQL就不用重新帮你排序了。
rowId好像orcle数据库会建
线上的SSD价格非常高。
哈希结构
哈希的时间复杂度是O(1)
哈希用的特别少?
哈希冲突,要遍历链表。遍历链表是比较耗费时间的。
而主要原因是不支持范围查找
HashMap的底层就已经成了用红黑树来实现的了。
联合索引 的存储结构有的SQL语句走索引,有的sql语句不走索引
EXPLAIN分析情况,优化的问题
联合存储索引底层的存储结构:按照建索引的先后顺序的名称来建索引,B+树的索引是从左到右依次递增的。
优化慢SQL查询。
java开发要学明白的东西挺多的。
最左前缀法则:
MVCC
锁机制
SQL优化
底层优化原理
SQL语句很长不好优化
把一线互联网公司的架构了解了解。
JVM性能调优
Tomcat调优,各种性能调优。