以下就是跟大家分享的19個MySQL性能優化主要要點,一起學習學習。
1、為查詢優化你的查詢
大多數的MySQL服務器都開啟了查詢緩存。這是提高性最有效的方法之一,而且這是被MySQL的數據庫引擎處理的。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放到一個緩存中,這樣,后續的相同的查詢就不用操作表而直接訪問緩存結果了。
這里最主要的問題是,對于程序員來說,這個事情是很容易被忽略的。因為,我們某些查詢語句會讓MySQL不使用緩存。請看下面的示例:
| // 查詢緩存不開啟 $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'"); |
上面兩條SQL語句的差別就是 CURDATE() ,MySQL的查詢緩存對這個函數不起作用。所以,像 NOW() 和 RAND() 或是其它的諸如此類的SQL函數都不會開啟查詢緩存,因為這些函數的返回是會不定的易變的。所以,你所需要的就是用一個變量來代替MySQL的函數,從而開啟緩存。
2、EXPLAIN 你的SELECT查詢
使用EXPLAIN關鍵字可以讓你知道MySQL是如何處理你的SQL語句的。
有表關聯的查詢,如下列:
| select username, group_name from users u joins groups g on (u.group_id = g.id) |
發現查詢緩慢,然后在group_id字段上增加索引,則會加快查詢
3、當只要一行數據時使用LIMIT 1
當你查詢表的有些時候,你已經知道結果只會有一條結果,單因為你可能需要去fetch游標,或是你也許會去檢查返回的記錄數。
在這種情況下,加上LIMIT 1 可以增加性能。這樣一樣, MySQL數據庫引擎會在找到一條數據后停止搜索,而不是繼續往后查找下一條符合記錄的數據。
下面的示例,只是為了找一下是否有“中國”的用戶,很明顯,后面的會比前面的更有效率。(請注意,第一條中是Select *,第二條是Select 1)
| // 沒有效率的: $r = mysql_query("SELECT * FROM user WHERE country = 'China'"); if (mysql_num_rows($r) > 0) { // ... } // 有效率的: $r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); if (mysql_num_rows($r) > 0) { // ... } |
4、為搜索字段建索引
索引并不一定就是給主鍵或是唯一的字段。如果在你的表中,有某個字段你總要會經常用來做搜索,那么,請為其建立索引吧。
5、在Join表的時候使用相當類型的列,并將其索引
如果你的應用程序有很多JOIN查詢,你應該確認兩個表中Join的字段是被建過索引的。這樣,MySQL內部會啟動為你優化Join的SQL語句的機制。
而且,這些被用來Join的字段,應該是相同的類型的。例如:如果你要把DECIMAL字段和一個INT字段JOIN在一起,MYSQL就無法使用他們的索引。對于那些STRING類型,還需要有相同的字符集才行(兩個表的字符集有可能不一樣)
新聞熱點
疑難解答