關於MYSQL最佳化(持續更新)

來源:互聯網
上載者:User

標籤:

*利用MYSQL資料緩衝提高效率,注意事項:

  1.應用環境:不經常改變的表及對此表相同的查詢

  2.不適用於伺服器端編寫的語句

  3.根據資料使用頻率,合理分解表

  4.合理使用預設條件,提高命中率

  5.統一SQL語句編寫規範,因為MYSQL解析時區分大小寫

  6.增加伺服器緩衝空間

 

*為查詢快取,最佳化查詢語句:

// 查詢快取不開啟 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 開啟查詢快取 $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= ‘$today‘"); 

用變數代替MYSQL函數,開啟緩衝

 

*EXPLAIN你的SQL語句,分析查詢效率

*只要一行資料時,使用LIMIT 1

*為不經常添加修改,又經常查詢的欄位,添加索引

  很蛋疼的一件事,自行衡量是否添加

*JOIN表的時候,使用相同類型的列,STRING類型,兩表字元集要一致

*不使用 ORDER BY RAND(),效能會指數級下降

// 千萬不要這樣做: $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); // 這要會更好: $r = mysql_query("SELECT count(*) FROM user"); $d = mysql_fetch_row($r); $rand = mt_rand(0,$d[0] - 1); $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

*避免SELECT *,應該用什麼取什麼,會導致速度變慢及網路負載加重

*使用VARCHAR類型當主鍵會降低效能,永遠為每張表設定ID,最好為INT型(推薦UNSIGNED),並自增

*為有限取值的列使用ENUM

*選擇性使用PROCEDURE ANALYSE()建議

*儘可能使用NOT NULL

*把IP地址存成UNSIGNED INT

*固定長度的表會更快

*垂直分割,注意分出去的表不經常被JOIN,否則效能會級數下降

*拆分大的DELETE 或 INSERT

*越小的列會越快,比如僅幾條資料的主鍵可採用SMALLINT、TINYINT

*選擇正確的儲存引擎

關於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.