MySQL表優化

error0318發表於2020-10-20

優化MySQL的方式

(1)讀寫分離,主資料庫負責寫,多個從資料庫負責讀

(2)限制查詢。每條sql語句需要加限制條件,避免全表掃描

(3)使用MySQL快取(針對更新少,查詢多,重量級的資料表)

(4)垂直分割槽:將一個資料表拆分成多個資料表(對欄位進行拆分)

(5)建立合適索引

        優點:可以使得行資料變小,在查詢時減少讀取的Block數,減少I/O次數。此外,垂直分割槽可以簡化表的結構,易於維護。

        缺點: 主鍵會出現冗餘,需要管理冗餘列,並會引起Join操作,可以通過在應用層進行Join來解決。此外,垂直分割槽會讓事務變得更加複雜;

(5)水平分割槽:也是將一個表拆分成多個表(表結構不變,對資料進行拆分)

保持資料表結構不變,通過某種策略儲存資料分片。這樣每一片資料分散到不同的表或者庫中,達到了分散式的目的。 水平拆分可以支撐非常大的資料量。

 

MySQL快取?

       開啟查詢快取後在同樣的查詢條件以及資料情況下,會直接在快取中返回結果。這裡的查詢條件包括查詢本身、當前要查詢的資料庫、客戶端協議版本號等一些可能影響結果的資訊。因此任何兩個查詢在任何字元上的不同都會導致快取不命中。此外,如果查詢中包含任何使用者自定義函式、儲存函式、使用者變數、臨時表、Mysql庫中的系統表,其查詢結果也不會被快取。

快取建立之後,Mysql的查詢快取系統會跟蹤查詢中涉及的每張表,如果這些表(資料或結構)發生變化,那麼和這張表相關的所有快取資料都將失效。

快取雖然能夠提升資料庫的查詢效能,但是快取同時也帶來了額外的開銷,每次查詢後都要做一次快取操作,失效後還要銷燬。 因此,開啟快取查詢要謹慎,尤其對於寫密集的應用來說更是如此。如果開啟,要注意合理控制快取空間大小,一般來說其大小設定為幾十MB比較合適。

相關文章