MYSQL優化思路

MYSQL優化概述

一、在數據庫級別進行優化

使數據庫應用程序快速運行的最重要因素是其基本設計,在數據庫層面,我們往往可以從以下幾個方面下手:

1.表結構合理嗎?
每個列是否具有正確的數據類型
每個表是否具有適合工作類型的列
例如,執行頻繁更新的應用程序通常具有許多具有少量列的表,而分析大量數據的應用程序通常具有很少列的表。

2.是否有適當的索引來提高查詢效率?

3.是否爲每個表使用適當的存儲引擎?(例如事務性存儲引擎InnoDB和非事務性存儲引擎MyISAM的選擇對於性能和可伸縮性來說非常重要。)
注意:
InnoDB是新表的默認存儲引擎。
實際上,高級 InnoDB性能特徵意味着 InnoDB表通常優於更簡單的MyISAM表,尤其是對於繁忙的數據庫。

4.每個表是否使用適當的行格式?

5.是否使用適當的鎖定策略?

6.是否正確使用了用於緩存的所有內存區域?
足夠大以容納頻繁訪問的數據,但不能太大以至於它們會超載物理內存並導致分頁。要配置的主要內存區域是InnoDB緩衝池和MyISAM密鑰緩存。

二、在硬件級別進行優化

隨着數據庫變得越來越繁忙,任何數據庫應用程序最終都會達到硬件限制。DBA必須評估是否可以調整應用程序或重新配置服務器以避免這些 瓶頸,或者是否需要更多硬件資源。系統瓶頸通常來自這些來源:

1.磁盤尋找
磁盤需要一段時間才能找到一塊數據。對於現代磁盤,平均時間通常低於10毫秒,因此我們理論上可以做到大約100次尋找。這個時間用新磁盤慢慢改善,並且很難針對單個表進行優化。優化尋道時間的方法是將數據分配到多個磁盤上。

2.磁盤讀寫
當磁盤位於正確位置時,我們需要讀取或寫入數據。使用現代磁盤,一個磁盤可提供至少10-20MB / s的吞吐量。這比搜索更容易優化,因爲可以從多個磁盤並行讀取。

3.CPU週期
當數據在主存儲器中時,我們必須處理它以獲得我們的結果。與內存量相比具有大表是最常見的限制因素。但是對於小表,速度通常不是問題。

4.內存帶寬
當CPU需要的數據量超過CPU緩存容量時,主內存帶寬成爲瓶頸。對於大多數系統來說,這是一個不常見的瓶頸,但依然需要注意

三、平衡可移植性和性能

要在可移植的MySQL程序中使用面向性能的SQL擴展,您可以在/*! */註釋分隔符的語句中包含特定於MySQL的關鍵字。其他SQL服務器忽略註釋的關鍵字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章