備註:問題摘抄自慕課網張一勤老師
爲什麼 group by 的效率比較低?
group by 是將數據分組,這其中實際也會涉及到排序的操作。如果你的數據量很大,那麼,這個排序過程可能是非常慢的。所以,排序的過程會降低 SQL 語句的執行效率。
將數據全量查出,在程序中處理,這樣好嗎?
這樣肯定是不合適的。因爲這樣做:大數據量的傳輸很耗時、消耗機器的內存、大數據量的處理本身也非常慢。
group by的常用優化方案
效率低的根本原因就是因爲數據量大導致的,所以,想要做優化,核心思想就是降低數據量。可以在 group by 之前把需要過濾的數據通過 where 條件給出;給 group by 的相關字段加上索引等等。
判斷一條數據記錄是否在一張表中
這個判斷最高效的方式當前是判斷主鍵;如果不能通過主鍵判斷,需要 where 去查詢帶有索引的字段列;如果需要判斷的列沒有索引,mysql 是需要掃描數據記錄的,效率最低。
哪些字段類型適合加索引 ?哪些字段類型不適合加索引 ?你能解釋清楚嗎 ?
其實,對於字符類型,也並不是絕對不能加索引的。數據庫常用的索引規範如下:
1、表的主鍵、外鍵必須有索引;
2、數據量超過300的表應該有索引;
3、經常與其他表進行連接的表,在連接字段上應該建立索引;
4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;
7、複合索引的建立需要進行仔細分析;儘量考慮用單字段索引代替;
8、頻繁進行數據操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執行計劃造成負面影響。