1. 程式人生 > >mysql優化之sql執行流程及表結構(schema)對效能的影響

mysql優化之sql執行流程及表結構(schema)對效能的影響

part 1 sql執行流程(如下圖所示)

1、客戶端傳送一條查詢到伺服器。

2、伺服器通過許可權檢查後,先檢查查詢快取,命中則直接返回結果。否則進入3。

3、伺服器進行sql解析,預處理,再由優化器根據該sql涉及到的資料表的資訊計算,生成執行計劃。

4.、MySQL根據優化器生成的執行計劃,呼叫儲存引擎的API來執行查詢;
5.、將結果返回給客戶端。

總結:SQL執行的最大瓶頸在於磁碟的IO,即資料的讀取;不同SQL的寫法,會造成不同的執行計劃的執行,而不同的執行計劃在IO的上面臨完全不一樣的數量級,從而造成效能的差距;優化SQL,其實就是讓查詢優化器根據你所希望的執行過程來選擇匹配的執行計劃,減少查詢中產生的IO

 

part 2 表結構(schema)對效能的影響

1、資料庫三正規化,適當設定冗餘資料

1NF:是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,不滿足第一正規化的資料庫不是關係型資料庫。

2NF:資料庫表中的每個例項或行必須可以被惟一地區分。

3NF:資料庫表中只包含其它表中的主關鍵字資訊。 (不允許有冗餘資料)

2、大表拆小表,有大資料的列單獨拆成小表

3、把常用屬性分離成小表 ,這樣可以減少查詢常用屬性需要查詢的列,便於常用屬性的集中快取