一.事务四大特性
1.原子性:一起成功,一起失败,通过回滚日志实现
2.一致性:事务前后,数据保持一直,通过重做日志实现
3.隔离性:所有操作执行完以前其它会话不能看到过程,保证并行事务互不干扰,通过锁实现
4.持久性:一旦事务提交,对数据的改变就是永久的
二.数据库隔离级别
1.读未提交(脏、幻、不可重复度都会出现)
2.读提交(避免脏读,*Oracle默认级别)
3可重复读(避免不可重复读,*Mysql默认级别)
4.序列化(串行,最高级别!直接没并行了)
三.MYSQL的两种存储引擎区别
1.InnoDB支持事务,MyISAM不支持
2.InnoDB支持外键,MyISAM不支持
3.MyISAM适合查询和插入为主的应用,InnoDB适合频繁修改或安全性较高的应用
4.InnoDB不支持fulltext索引,MyISAM提供高速存储与检索,以及全文搜索的能力
5.InnoDB不保存表的行数,count全表比较慢
6.InnoDB支持行锁
四.B+索引和hash索引
1.hash:等值查询效率高,不能排序,不能进行范围查询
2.B+:数据有序,范围查询
五.索引的优缺点,什么时候使用索引
好处是提高查询速度,缺点是更新数据慢,所以要对数据频繁查询少更改时可以建立索引
六.索引的底层实现(B+树,为何不采用红黑树,B树)
索引以索引文件形式存储在磁盘,因为磁盘IO慢,所以索引的结构组织要尽量在查询过程中提高索引命中效率,减少磁盘IO的存取次数
1.红黑树:新增、删除时会频繁调整
2.B数:查询性能不稳定(有时候很快,很时候很慢)
3.B+树:查询性能稳定,更适合基于范围的查询
七.索引的最左匹配特性
联合索引,最左优先,在检索数据时从联合索引的最左面开始匹配
如联合索引a,b,c | |
---|---|
where b='?' | 不走索引 |
where b='?' and c='?' | 不走索引 |
where a='?' | 走索引 |
where a='?' and b='?' | 走索引 |
八.索引失效条件
1.or作为连接条件,除非每个字段加索引
2.like,以%开头
3.内部函数计算
4.is null
等...