程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL優化GROUP BY計劃

MySQL優化GROUP BY計劃

編輯:MySQL綜合教程

MySQL優化GROUP BY計劃。本站提示廣大學習愛好者:(MySQL優化GROUP BY計劃)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL優化GROUP BY計劃正文


履行GROUP BY子句的最普通的辦法:先掃描全部表,然後創立一個新的暫時表,表中每一個組的一切行應為持續的,最初應用該暫時表來找到組並運用集合函數(假如有集合函數)。在某些情形中,MySQL經由過程拜訪索引便可以獲得成果,而不消創立暫時表。此類查詢的 EXPLAIN 輸入顯示 Extra列的值為 Using index for group-by。

一。 松懈索引掃描

1.知足前提

  查詢針對一個表。
 GROUP BY 應用索引的最左前綴。
 只可使用MIN()和MAX()集合函數,而且它們均指向雷同的列。
2.示例

表t1(c1,c2,c3,c4) 有一個索引 idx(c1,c2,c3):

SELECT c1, c2 FROM t1 GROUP BY c1, c2;

SELECT DISTINCT c1, c2 FROM t1;

SELECT c1, MIN(c2) FROM t1 GROUP BY c1;

SELECT c1, c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;

SELECT MAX(c3), MIN(c3), c1, c2 FROM t1 WHERE c2 > const GROUP BY c1, c2;

SELECT c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;

SELECT c1, c2 FROM t1 WHERE c3 = const GROUP BY c1, c2;

不知足前提示例:

1. 除MIN()或MAX(),還有其它積累函數,例如:

SELECT c1, SUM(c2) FROM t1 GROUP BY c1;

2. GROUP BY子句中的域不援用索引開首,例如:

SELECT c1,c2 FROM t1 GROUP BY c2, c3;

3. 查詢援用了GROUP BY 部門前面的症結字的一部門,而且沒有等於常量的等式,例如:  

SELECT c1,c3 FROM t1 GROUP BY c1, c2;

二。緊湊索引掃描

假如不知足松懈索引掃描前提,履行GROUP BY依然可以不消創立暫時表。假如WHERE子句中有規模前提,該辦法只讀取知足這些前提的症結字。

不然,停止索引掃描。該辦法讀取由WHERE子句界說的規模。

1. GROUP BY 中有一個破綻,但曾經由前提c2 = 'a'籠罩。

SELECT c1,c2,c3 FROM t1 WHERE c2 = 'a' GROUP BY c1,c3;

2. GROUP BY 不是知足最左前綴,然則有一個前提供給該元素的常量:

SELECT c1,c2,c3 FROM t1 WHERE c1 = 'a' GROUP BY c2,c3;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved