btree索引与hash索引的区别
hash索引的优点
hash索引解构的特殊性,其检索效率非常高,btree索引需要充根节点访问到分支节点,这样会有多次的io访问,所以hash索引
的查询效率远高于btree
btree索引的优点
1.hash索引不能满足范围查询而btree可以这是由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于
等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算
前完全一样。
2.Hash 索引无法被用来避免数据的排序操作。由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的
大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;
3.Hash 索引不能利用部分索引键查询。对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算Hash
值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
4.Hash 索引在任何时候都不能避免表扫描。Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对
应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录
条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。
注意事项{:.warning}
左连接求和时右边的表相关的列求和可能会重复。
mysql四种事物隔离级别
read uncommitted
读未提交,即便是事务没有被提交(commit),但是其他事务能读到未提交的数据,这是隔离级别最低的一种。
read committed
读已提交,当前事务只能读到其他事物提交之后的数据,未提交的数据读不到,这个可能造成在同一个事务里,前后读到的数据可能不一样(不可重复读)。大多数数据库默认的隔离级别(oracle)
repeatable read
可重复读,在事务里,每次读取数据的结果都一样,不管其他事务的结果有没有提交。可能会造成幻读。MySQL默认的隔离级别
serializable
串行化,一个事务提交前,其他事物将被挂起。就是说,在同一时间只有一个事务操作表。