mysql優化之sql優化原則

2022-09-14 00:27:14 字數 1606 閱讀 7969

原則一:選擇需要優化的sql

1 選擇更需要優化的sql:高併發 低消耗的sql

例項:a語句 1小時請求1w次,1次10個io;b語句 1小時請求10次,1次1w個io;

1)從單位時間產生的io總數來說,相同的;

2)針對乙個sql,如果我能把10個io變成7個io,一小時減少3w個io; 針對第二個sql,如果能把1w個io變成7k個io,一小時減少3w個io;

3)從優化難度上講,1w->7k難的多;

4)從整體效能上來說,第乙個sql的優化能夠極大的提公升系統整體的效能;第二個sql慢一點,無非也就是10個連線查詢慢一點;

2 定位效能瓶頸:sql執行較慢有兩個影響原因,io和cpu,明確效能瓶頸所在,明確優化目標。

原則二:使用explain和profile指令

1 首先明確你需要的執行計畫,再使用explain檢查;

2 任何sql的優化,都從explain語句開始;explain語句能夠得到資料庫執行該sql選擇的執行計畫;

3 使用profile明確sql的問題和優化的結果;

原則三:小結果集驅動大結果集

以join為例:

1 join的原理: 在mysql中使用nested loop join來實現join; a join b:通過a表的結果集作為迴圈基礎,一條一條的通過結果集中的資料作為過濾條件到下乙個表中查詢資料,然後合併結果;

select a.a,b.b from a join b on a.xx=b.yy where b.zz=0;

執行流程:for(id in a){

select * from b where b.xx=id;

再從中間結果集中用b.zz=0去過濾資料。

2 join的優化原則:  1)盡可能減少join 語句中的迴圈總次數,用小結果集驅動大結果集;

2)優先優化nested loop 的內層迴圈;

3)保證join 語句中被驅動表上join 條件字段已經被索引;

4)擴大join buffer的大小;

原則四:在索引中完成排序

原則五:使用最少的column

1 可以減少網路傳輸量

2 mysql排序原理是將所有column資料取出,在排序快取區排序,再返回結果,如果column多,資料量大,排序區容量不夠時,

就會先用排序所用column進行排序,再去取資料,再返回,多次請求資料庫。

原則六:使用最有效的過濾條件

1 過多的where條件不一定能夠提高訪問效能;

2 一定要讓where條件使用自己預期的執行計畫;

原則七:避免複雜的join和子查詢

1 複雜的join和子查詢,需要鎖定過多的資源,mysql在大量併發情況下處理鎖定效能下降較快;

2 不要過多依賴sql的功能,把複雜的sql拆分為簡單的sql;

3 mysql子查詢效能較低,應盡量避免使用;

mysql 常用sql語句優化原則

優化索引mysql 中用到索引的的場景 索引的使用原則 符合左字首原則 索引上不要使用函式和進行運算,另外型別也要對應 比如 where name abc 雖然sql不會報錯,但是會導致索引失效 使用 or 時,如果存在沒有在索引上的列,也會導致索引失效 如果 mysql 分析使用索引必沒有使用索引...

mysql 優化原則

2.查詢需要用到的字段。不要查詢表裡面的所有沒用的字段。原因是使用者端用sql語句查詢的時候,把所有沒有用到的字段也查詢出來之後。伺服器端返回的資料報就會顯示很大。影響返回速度。3.多表查詢的時候,是小表驅動大表。這樣才會更高效。4.詳細mysql原理分析位址可參考位址 5.索引優化 mysql索引...

MySQL優化 SQL優化

其實sql語句的優化核心就在避免全表掃瞄上面 對查詢語句優化,避免全表掃瞄 首先應考慮在where及order by涉及的列上建立索引 避免在where子句中對字段進行表示式和函式操作 避免where進行null 等運算導致的全表掃瞄 在group by後面增加order by null就可以防止g...