mysql 数据库相关

1.稀疏索引与稠密索引

  答:mysql

2.如何定位并优化慢查询sql

  答:根据慢日志定位慢查询sql、使用explain等工具分析sql、修改sql或尽可能让sql走索引sql

3.联合索引的最左匹配原则的成因

  答:并发

  非叶子节点是按照年龄排序的,叶子点根据年龄排序以后再根据姓氏和名字排序;解释了最左原则mvc

4.RC、RR级别下的InnoDB的非阻塞读如何实现

5.MySQL-InnoDB-MVCC多版本并发控制  

  

6.mysql Innodb在RR级别如何避免幻读

  a、幻读:事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的所有数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,之后就会发生操做第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉同样。工具

  b、mysql如何实现避免幻读:在快照读读状况下,mysql经过mvcc来避免幻读。在当前读读状况下,mysql经过next-key来避免幻读优化

  c、什么是mvcc:mvcc全称是multi version concurrent control(多版本并发控制)。mysql把每一个操做都定义成一个事务,每开启一个事务,系统的事务版本号自动递增。每行记录都有两个隐藏列:建立版本号和删除版本号日志

    • select:事务每次只能读到建立版本号小于等于这次系统版本号的记录,同时行的删除版本号不存在或者大于当前事务的版本号。blog

    • update:插入一条新记录,并把当前系统版本号做为行记录的版本号,同时保存当前系统版本号到原有的行做为删除版本号。排序

    • delete:把当前系统版本号做为行记录的删除版本号索引

    • insert:把当前系统版本号做为行记录的版本号

  d、什么是next-key锁: 能够简单的理解为X锁+GAP锁

  e、什么是快照读和当前读:

    • 快照读:简单的select操做,属于快照读,不加锁。(固然,也有例外,下面会分析)

      • select * from table where ?;
    • 当前读:特殊的读操做,插入/更新/删除操做,属于当前读,须要加锁。

      • select * from table where ? lock in share mode;
      • select * from table where ? for update;
      • insert into table values (…);
      • update table set ? where ?;
      • delete from table where ?;
相关文章
相关标签/搜索