MySQL數據庫十大優化技巧

1. 優化你的MySQL查詢緩存


在MySQL服務器上進行查詢,可以啟用高速查詢緩存。讓數據庫引擎在後臺悄悄的處理是提高性能的最有效方法之一。當同一個查詢被執行多次時,如果結果是從緩存中提取,那是相當快的。


但主要的問題是,它是那麼容易被隱藏起來以至於我們大多數程序員會忽略它。在有些處理任務中,我們實際上是可以阻止查詢緩存工作的。


1. // query cache does NOT work


2. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);


3.


4. // query cache works!


5. $today = date(“Y-m-d”);


6. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= $today”);


7.


8. // query cache does NOT work


9. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);


10.


11. // query cache works!


12. $today = date(“Y-m-d”);


13. $r = mysql_query(“SELECT username FROM user WHERE signup_date >= $today”);


2. 用EXPLAIN使你的SELECT查詢更加清晰


使用EXPLAIN關鍵字是另一個MySQL優化技巧,可以讓你瞭解MySQL正在進行什麼樣的查詢操作,這可以幫助你發現瓶頸的所在,並顯示出查詢或表結構在哪裡出瞭問題。


EXPLAIN查詢的結果,可以告訴你那些索引正在被引用,表是如何被掃描和排序的等等。


實現一個SELECT查詢(最好是比較復雜的一個,帶joins方式的),在裡面添加上你的關鍵詞解釋,在這裡我們可以使用phpMyAdmin,他會告訴你表中的結果。舉例來說,假如當我在執行joins時,正忘記往一個索引中添加列,EXPLAIN能幫助我找到問題的所在。



添加索引到group_id field後



3. 利用LIMIT 1取得唯一行


有時,當你要查詢一張表是,你知道自己隻需要看一行。你可能會去的一條十分獨特的記錄,或者隻是剛好檢查瞭任何存在的記錄數,他們都滿足瞭你的WHERE子句。


在這種情況下,增加一個LIMIT 1會令你的查詢更加有效。這樣數據庫引擎發現隻有1後將停止掃描,而不是去掃描整個表或索引。、


   1. // do I have any users from Alabama?    


   2. // what NOT to do:    


   3. $r = mysql_query(“SELECT * FROM user WHERE state = Alabama”);    


   4. if (mysql_num_rows($r) > 0) {    


   5.     // …    


   6. }      


   7. // much better:    


   8. $r = mysql_query(“SELECT 1 FROM user WHERE state = Alabama LIMIT 1”);    


   9. if (mysql_num_rows($r) > 0) {    


  10.     // …    


  11. }  


4. 索引中的檢索字段


索引不僅是主鍵或唯一鍵。如果你想搜索表中的任何列,你應該一直指向索引。



5. 保證連接的索引是相同的類型


如果應用程序中包含多個連接查詢,你需要確保你鏈接的列在兩邊的表上都被索引。這會影響MySQL如何優化內部聯接操作。


此外,加入的列,必須是同一類型。例如,你加入一個DECIMAL列,而同時加入另一個表中的int列,MySQL將無法使用其中至少一個指標。即使字符編碼必須同為字符串類型。


   1. // looking for companies in my state    


   2. $r = mysql_query(“SELECT company_name FROM users   


   3.     LEFT JOIN companies ON (users.state = compan

發佈留言