索引
二叉搜索树
红黑树
解决了单调增长时带来的问题
但是当数据量非常巨大时 树的高度也会很高 访问叶子节点的效率还是很低
B+树
B树与B+树特性介绍:https://zhuanlan.zhihu.com/p/98021010
https://jishuin.proginn.com/p/763bfbd296b7
演示:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
Hash表
对每一个索引元素计算哈希散列值,存储在哈希表中,表查询的时候对索引进行依次哈希运算,找到在哈希表的位置
也就能定位到磁盘位置
如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;
但是,如果是范围查询检索,这时候哈希索引就毫无用武之地了.
**
Myisam存储引擎
索引文件和数据文件分离(非聚集)
数据文件为my d(data)
索引文件为my i(index)
此外还有一个存储结构的frm(frame)文件
Innodb存储引擎
框架frm文件
数据和索引ibd文件
表必须有主键作为索引来维护表的结构
不要设置为uuid类型 因为表查询的时候需要进行索引比对
整型对比更快,而且占用空间更小
而且uuid插入的时候是乱序的 b+树需要不断做平衡操作
b+树叶子节点指针为双向指针,便于范围查询
Insert into select from
之前一直看到这个文章,这个语句会出问题是因为mysql不使用索引查找和锁定行的话会进行全表扫描并锁住所有的行,所以只能用于冷处理.
