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 ?;
相關文章
相關標籤/搜索