mysql高級:數據庫優化

數據庫優化的基本十條原則。


1.儘量避免在列上進行運算,這樣會導致索引失效。


2.使用JOIN時,應該用小結果集驅動大結果集。同事把複雜的JOIN查詢拆分成多個query。因爲JOIN多個表時,可能導致更多的鎖定和堵塞。
    例如:
        SELECT * FROM A JOIN B ON A.id = B.id LEFT JOIN C ON C.time = A.date LEFT JOIN D ON C.pid = B.aid LEFT JOIN E ON E.cid = A.did


3.注意LIKE模糊查詢的使用,避免%%。
    例如:
        SELECT * FROM t WHERE name LIKE '%de%'
        優化爲
        SELECT * FROM t WHERE name >= 'de' AND name < 'df'


4.僅列出需要查詢的字段,這對速度不會有明顯影響,主要考慮節省內存。


5.使用批量插入語句節省交互。


6.limit的基數比較大時使用between。
    例如:
        SELECT * FROM article order by id limit 1000000,10
        優化爲
        SELECT * FROM article WHERE id between 1000000 and 1000010 order by id


        between先定比limit快,所以在海量數據訪問時,建議用between或是where替換掉limit.但是between也有缺點,如果id中間有斷行活着中間部分id不讀取的情況,總讀取的數量會小於預計數量。


        在取比較後面的數據時,通過desc方式把數據反向查找,以減少對前段數據的掃描,讓limit的基數越小越好!
        
7.不要使用rand函數獲取多條隨機記錄
    例如:
        SELECT * FROM table order by rand() limit 20;
        優化
        SELECT * FROM table AS t1 JOIN (SELECT ROUND (rand() * ((SELCT MAX (id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id) AS t2 WHERE t1.id >=t2.id ORDER BY t1.id LIMIT 1;


        這是獲取一條隨機記錄,這樣即使執行20次,也比原來的語句高效。或者先用PHP產生隨機數,把這個字符串傳給mysql,mysql裏用in查詢。


8.避免使用NULL。


9.不要使用count(id),而應該是count(*)。


10.不要做無謂的排序操作,而應儘可能在索引中完成排序。
發佈了51 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章