通过 MVCC(Multi-Version ConCurrency Control)、锁机制来实现隔离性的。
MVCC 工作在读已提交和可重复读两个隔离级别之下,支持并发读读、读写、写读,不支持
并发写写。
(4)事务的一致性:
一句话描述就是:通过 AID(原子性、持久性、隔离性)来保证事务的一致性。
5、什么是索引
索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。
索引的作用就相当于目录的作用。
索引可以加速数据的查询
帮组服务器避免进行排序和分组,以及避免创建临时表
将随机 I/O 变为顺序 I/O
缺点 :
创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数
据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
索引需要使用物理文件存储,增加了数据库的占用的存储空间。
但是,使用索引一定能提高查询性能吗? 大多数情况下,索引查询都是比全表扫描要
快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。
6、什么情况下创建索引
选择合适的字段创建索引:
不为 NULL 的字段:索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字
段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用
0,1,true,false 这样语义较为清晰的短值或短字符作为替代。
被频繁查询的字段:我们创建索引的字段应该是查询操作非常频繁的字段。
被作为条件查询的字段:被作为 WHERE 条件查询的字段,应该被考虑建立索引。
频繁需要排序的字段:索引已经排序,这样查询可以利用索引的排序,加快排序查询时
间。
被经常频繁用于连接的字段:经常用于连接的字段可能是一些外键列,对于外键列并不
一定要建立外键,只是说该列涉及到表与表的关系。对于频繁被连接查询的字段,可以
考虑建立索引,提高多表连接查询的效率。
注意:
被频繁更新的字段应该慎重建立索引:虽然索引能带来查询上的效率,但是维护索引
的成本也是不小的。
尽可能的考虑建立联合索引而不是单列索引:因为索引是需要占用磁盘空间的,可以
简单理解为每个索引都对应着一颗 B+树。如果一个表的字段过多,索引过多,那么当
这个表的数据达到一个体量后,索引占用的空间也是很多的,且修改索引时,耗费的时
间也是较多的。如果是联合索引,多个字段在一个索引上,那么将会节约很大磁盘空间,
且修改数据的操作效率也会提升。
注意避免冗余索引:冗余索引指的是索引的功能相同,能够命中索引(a, b)就肯定能命
中索引(a) ,那么索引(a)就是冗余索引。
考虑在字符串类型的字段上使用前缀索引代替普通索引:前缀索引仅限于字符串类型,