*利用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
*選擇正確的存儲引擎