mysql的優化大的有兩方面:
一、配置優化
配置的優化其實包含兩個方面的:操做系統內核的優化和mysql配置文件的優化
1)系統內核的優化對專用的mysql服務器; 2)mysql配置的優化,通常來講包含:IO處理的經常使用參數、最大鏈接數設置、緩存使用參數的設置、慢日誌的參數的設置、innodb相關參數的設置等
二、sql語句的優化
1.儘可能稍做計算
Mysql的做用是用來存取數據的,不是作計算的,作計算的話能夠用其餘方法去實現,mysql作計算是很耗資源的。
2.儘可能少join
?
3.儘可能少排序
排序操做會消耗較多的CPU資源。對於MySQL來講,減小排序有多種辦法,好比:
經過利用索引來排序進行優化
減小參與排序的記錄條數
非必要不對數據進行排序
4.儘可能避免select*
在數據量少而且訪問量不大的狀況下,select*沒有什麼影響,可是量級達到必定級別的時候,在執行效率和IO資源的使用上,仍是有很大關係的,用什
麼字段取什麼字段,減小沒必要要的資源浪費。
5.儘可能用join代替子查詢
?
6.儘可能少 or
使用union all或者是union(必要的時候)的方式來代替or會獲得更好的效果。
7.儘可能用union all代替union
union和union all的主要差別是前者須要將兩個(或者多個)結果集合並後再進行惟一性過濾操做,這就會涉及到排序,增長大量的CPU運算,加大資源
消耗及延遲。因此當咱們能夠確認不可能出現重複結果集或者不在意重複結果集的時候,儘可能使用union all而不是union。
8.儘可能早過濾
最多見於索引的優化設計中,將過濾性更好的字段放得更靠前。
在SQL編寫中一樣可使用這一原則來優化一些Join的SQL。好比咱們在多個表進行分頁數據查詢的時候,咱們最好是可以在一個表上先過濾好數據
分好頁,而後再用分好頁的結果集與另外的表Join,這樣能夠儘量多的減小沒必要要的IO操做,大大節省IO操做所消耗的時間。
9.優先優化高併發的SQL,而不是執行頻率低某些「大」SQL
對於破壞性來講,高併發的SQL老是會比低頻率的來得大,由於高併發的SQL一旦出現問題,甚至不會給咱們任何喘息的機會就會將系統壓跨。而對
於一些雖然須要消耗大量IO並且響應很慢的SQL,因爲頻率低,即便遇到,最多就是讓整個系統響應慢一點,但至少可能撐一下子,讓咱們有緩衝的機會。
10.從全局出發優化,而不是片面調整
SQL優化不能是單獨針對某一個進行,而應充分考慮系統中全部的SQL,尤爲是在經過調整索引優化SQL的執行計劃的時候,千萬不能顧此失
彼,因小失大。
11.儘量對每一條運行在數據庫中的SQL進行explain