搜索引擎
InnoDB vs MyISAM
I:支持事务,支持外键,支持行锁和表锁
M:不支持事务,不支持外键,支持表锁,支持全文索引
事务的特性和隔离级别
ACID
原子性:
一致性
隔离性:多个事务处理同一个数据互相不影响
持久化.事务提交后保存后不会被更改
隔离级别:
读未提交
读已提交
可重复读
串行化
mysql索引
索引的原理 类型
原理:数据表中一个或者多个进行排序数据结构
类型:作为key的存在
普通索引
唯一索引:索引值必须是唯一
多列索引:(组合索引)最左原理,b+tree是最左
主键索引:
全文索引:倒排索引,使用的比较少
创建索引的条件:
1 经常作为查询条件的字段(where条件)
2:经常用作表链接的字段
3:经常出现在order by, group by 之后的字段
创建索引的注意事项
非空字段
区分度高,离散度大,不要有相同的值
索引的长度不能太长
索引失效:(key值无法比较)
记忆口诀;模糊匹配 类型隐转 最左匹配
模糊搜索:以like的语句 模糊搜索
出现隐式类型转化(python是动态语言查询中的需要注意)
没有满足最左前缀原则
聚集索引和非聚集索引:
聚集索引和非聚集索引指的是B+Tree叶节点的指针还是数据记录
myisam索引和数据分离,使用的是非聚集索引
innoDB:索引文件,使用的是聚集索引,主键索引指向的是叶节点的指针
排查慢查询
慢查询通常是缺少索引,索引不合理活着业务待物实现导致
B+Tree
查找结构:
线性查找:实现简单 太慢
二分查找:有序简单,要求有序,插入特别慢
HASH:查找特别快,占用空间,不太适合大规模数据
二叉查找树:插入查询都快,无法存大规模数据,时间复杂度退化
平衡树:解决时间复杂度退化问题,树是平衡的,节点非常多的时候,树很高
多路查找树:一个父亲多个孩子节点(度),节点过多树高不会特别深
多路平衡查找树:B-Tree
B+Tree:
B+Tree是B+树的变形
mysql实际使用的B+树作为索引的数据结构
叶子结点通过指针相连