MySQL效能最佳化

來源:互聯網
上載者:User

標籤:依賴   全表掃描   info   詳解   width   規範   出現   rand   使用   

1、為查詢快取最佳化查詢

  大多數的MySQL伺服器都開啟了查詢快取,這是提高效能最有效方法之一,而且這是被MySQL的資料庫引擎處理的。

  有些查詢不會使用緩衝,比如有curdate(),now(),Rand()或是其他的諸如此類的sql函數都不會開啟查詢快取,因為這些函數

  的返回是不定的異變的,無法進行緩衝,可以用變數代替MySQL函數,通過傳參開啟緩衝。

2、EXPLAIN 查詢語句

  使用Explain關鍵字可以分析MySQL是如何處理sql語句的,可以協助自己分析自己的查詢語句或者表結構的效能瓶頸。

  EXPLAIN命令分析詳解:參考

  https://www.cnblogs.com/gomysql/p/3720123.html

  

  主要關注的列:id,select_type,type,rows,Extra 

  ID 包含一組數字,查看查詢中執行select子句或動作表的順序,查看優先順序關係

  select_type 查看每一個select子句的類型(是簡單還是複雜)避免出現DEPENDENT SUBQUERY

  子查詢效率依賴外層查詢

  type 查看查詢在表中找到所需行的方式,盡量避免全表掃描,使用索引或外部索引鍵關聯

  rows查看select語句得到結果需要讀取的行數,根據行數進行最佳化

  Extra查看一些額外的資訊,如不使用索引排序

3、當只要一行資料時使用Limit 1

  當你查詢表的有些時候,如果知道查詢結果只會有一條,可以加上limit 1,當MySQL資料庫引擎找到一條資料

  後就會停止搜尋,而不是繼續往後尋找下一條符合記錄的資料

4、為搜尋欄位建立索引

  索引並不一定就是給主鍵或是唯一的欄位。對錶中經常搜尋的欄位建立索引。

5、在join表的時候使用相當的類型,並將其索引。如通過外部索引鍵關聯,或在兩張表中儲存相同的欄位資料。

6、避免select * 

  從資料庫裡讀的資料越多,查詢就會變得很慢,並且如果資料庫伺服器和web伺服器是兩台獨立的伺服器的話,

  還會增加網路傳輸的負載。用欄位名代替 * 。

7、反正常化設計,表的水平分割(以某一個條件列作為分割條件,如年份)

          垂直分割(將一個表的列分到不同的表中)

           表的合并

         列的反正常化(通過列的複製完成,消除表間的多次串連)

8、拆分大的delete或者insert語句

  這兩個操作都會造成鎖表,表如果鎖住了其他動作就都進不來了。如果訪問量很大,30秒的鎖表有可能會讓web服務崩潰。

  如果有很大的處理,需要將其拆分,使用limit將其進行劃分。

  

 

  

 

MySQL效能最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.