因此,在閱讀Performance in PDO/PHP/MySQL: transaction versus direct execution關於性能問題時,我想到我對MySQL中的鎖定表進行了一些研究。MySQL鎖定表是否影響相關視圖?
在http://dev.mysql.com/doc/refman/5.0/en/table-locking.html
表鎖定使許多會話 同時, 從表中讀取,但如果會話想要寫一個 表,它必須首先獲得獨佔 訪問。在更新期間,想要訪問此 特定表的所有其他 會話必須等到更新完成後才能更新 。
這部分讓我覺得特別是因爲我們大多數的查詢都是更新而不是插入。我想知道是否創建了一個名爲foo的表,在其上執行所有更新/插入,然後創建一個名爲foo_view(foo的副本,或者foo以及其他幾個表和foo的鏈接)這個鎖定問題是否仍然會發生?
也就是說,foo_view上的SELECT查詢是否仍然需要等待更新才能在foo上完成?
我的同事問另一個簡短的問題。這會影響緩存嗎?即如果SELECT被高速緩存,它會觸發緩存並返回結果,還是會等待鎖定先完成?
感謝您的回答。我修改了我的問題以詢問緩存。如果一個查詢被緩存了,它是否會取代該鎖,或者只有在打開該鎖之後纔會返回緩存的查詢結果? – CogitoErgoSum 2010-06-09 18:59:51
@CogitoErgoSum:不,查詢計劃緩存不會影響隔離級別。 – 2010-06-09 19:01:31
感謝OMG小馬! – CogitoErgoSum 2010-06-09 19:02:32