大資料量時Mysql的優化
阿新 • • 發佈:2020-11-17
單表資料量在百萬級內讀取效率還是可以的,可是一旦達到千萬級,效能會有較大的降低。
1、查詢優化
(1)建立索引
(2)快取
當你想使用該cache,必須把query_cache_size大小設定為非0。當設定大小為非0的時候,server會就會快取每次查詢返回的結果,到下次相同查詢server就直接從快取獲取資料,而不是再執行查詢。
(3)分庫分表(垂直切分/水平切分)
對於mysql,其資料檔案是以檔案形式儲存在磁碟上的。當一個數據檔案過大的時候,作業系統對大檔案的操作就會比較麻煩與耗時,而且有的作業系統就不支援大檔案,所以這個時候就必須分表了。
垂直拆分:原來一個表的資訊,拆分到兩個或者多個表中,通過主鍵來進行關聯。(垂直拆分列,列資料拆分到不同表中)
比如說一個新零售的電商資料庫,我們可以把跟商品相關的資料表拆分成一個數據庫,然後在這些資料表的基礎之上,構建出商品系統。比如用JAVA或者PHP語言,創建出一個商城系統。然後把跟進銷存相關的資料表拆分到另外一個數據庫上,再用程式構建出倉庫系統
垂直切分可以降低單節點資料庫的負載。原來所有資料表都放在一個數據庫節點上,無疑所有的讀寫請求也都發到這個MySQL上面,所以資料庫的負載太高。
垂直切分不能解決的是縮表,比如說商品表無論劃分給哪個資料庫節點,商品表的記錄還是那麼多,不管你把資料庫垂直拆分的有多細緻,每個資料表裡面的資料量是沒有變化的。
水平切分:把一個表的資料按照某種規則劃分到不同表或資料庫裡。(水平拆分行,行資料拆分到不同表中)
先水平切分,然後垂直切分。
隨著資料量的增加,最先應該做的是資料分片,利用多塊硬碟來增大資料IO能力和儲存空間,這麼做的成本是最低的。幾塊硬碟的錢就能收穫不錯的IO效能。
如果過早的對資料庫做了垂直切分,勢必要重新構建若干獨立的業務系統,工作量太巨大。水平切分並不需要業務系統做大幅度的修改,因此說應該先從水平切分開始做。
https://www.imooc.com/article/288363?block_id=tuijian_wz
https://www.cnblogs.com/czhang2-12/p/9633127.html