一.关于MySQL的知识
1.SQL中索引存在的意义,建立索引的方法
索引加快了查询,另外对于二级索引如果有需要的信息减少了回表;建立索引要在那些有区分度的信息上。
2.索引失效的5种情况
使用函数、索引列计算、like开头的%、隐式类型转换、覆盖索引不符合最左匹配原则
3.MySQL支持的四种隔离级别以及原理
读未提交、读提交、可重复读、串行化
不解决任何问题,解决脏读,解决不可重复读,几乎解决所有问题
mvcc可以使得读提交保证,加上next key lock
4.MySQL的原子性是怎么实现的
原子性是指事务要么全部成功要么全部失败,通过undo log和回滚实现的。
5.关于覆盖索引的知识
覆盖索引的等值操作可以一直利用索引,而范围操作前面可以,自己也可以,后面就不能利用索引
6.聚簇索引和二级索引
二级索引的索引节点往往存储的是不完整的信息比如主键,而聚簇索引除了存储索引还存储了完整的数据
建立多个索引会在MySQL中形成多个独立的b+树
7.为什么使用b+树而不是红黑树,哈希索引这些?
因为b+树的叶子节点存储数据,非叶子节点存储索引,树的层数低,可以减少磁盘IO;另外叶子节点存储数据适合按页读取;b+树叶子节点之间用指针链接,便于范围查询。
8.MySQL常见的存储引擎
innodb和mylsam
9.undo log redo log和bin log
前者保证原子性,后面两个确保写入的持久性,两阶段写。
总结,对于优化SQL语句要从联合索引这些角度去考虑