mysql 優化總結記錄

  1. 要加orderby 數據庫默認不是主鍵順序,或許和數據庫存儲引擎與查詢字段(索引)有關係。

  2. 數據重複多的字段建索引,反而會慢(索引過多,索引查詢也需要時間)。

  3. like 左模糊 %關鍵詞,(百萬數據結果集)mysql暫時沒有解決方案(或許設置全文索引可以),右模糊 關鍵詞% 建立索引。

  4. 分頁 如果主鍵順序沒有被破壞掉, 用BETWEEN;能用between就少用in(確定範圍比in這種不確定範圍的效率高) 例:

    select * from table where vid BETWEEN 1000000 and 1000010 order by vid asc;
    
  5. 因索引過多導致查詢慢的,可利用子查詢獲得主鍵,再join全部需要的字段。例:

    select * from table v1 RIGHT JOIN (SELECT Vid FROM table WHERE Uid=0 ORDER BY Vid asc limit 600000,10) v2 ON v2.Vid=v1.Vid;
    
  6. 儘可能大的減少查詢所獲取的結果集範圍,避免全文檢索,所以where要多用。

  7. or 儘量用union代替,or可能會導致放棄使用索引(現只在重複值較多的索引身上有優化現象)。例:

    select id from t where num=10
    union all
    select id from t where num=20;
    

    代替

    select id from t where num=10 or num=20
    
  8. where條件遵循最左原則,先用索引找出集合再排除其他沒索引的集合;複合索引必須嚴格按照前後索引順序,不然索引不會命中。

持續更新。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章