-
要加orderby 數據庫默認不是主鍵順序,或許和數據庫存儲引擎與查詢字段(索引)有關係。
-
數據重複多的字段建索引,反而會慢(索引過多,索引查詢也需要時間)。
-
like 左模糊 %關鍵詞,(百萬數據結果集)mysql暫時沒有解決方案(或許設置全文索引可以),右模糊 關鍵詞% 建立索引。
-
分頁 如果主鍵順序沒有被破壞掉, 用BETWEEN;能用between就少用in(確定範圍比in這種不確定範圍的效率高) 例:
select * from table where vid BETWEEN 1000000 and 1000010 order by vid asc;
-
因索引過多導致查詢慢的,可利用子查詢獲得主鍵,再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;
-
儘可能大的減少查詢所獲取的結果集範圍,避免全文檢索,所以where要多用。
-
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
-
where條件遵循最左原則,先用索引找出集合再排除其他沒索引的集合;複合索引必須嚴格按照前後索引順序,不然索引不會命中。
持續更新。。。