2012-04-21 60 views
1

這是MySQL中「group by」語句的複雜性嗎?按分組查詢複雜性分析MySQL組

我正在管理vaery大表,我也想知道是否有任何方法來計算查詢將花費多少時間。

+1

SQL旨在使您的dbms儘可能優化。無論如何,在我看來,只是做一些分析將是你最好的選擇。 – Jasper 2012-04-21 14:31:16

回答

0

這個問題是不可能的,知道整個查詢的樣子。有些組bys可能過於昂貴,而另一些則非常便宜,這一切都取決於數據庫中的索引如何設置,如果您按組的值可以緩存等。

例如,這是一個非常便宜分組:

CREATE TABLE t (a INT, KEY(a)); 
SELECT * FROM WHERE 1 GROUP BY a; 

由於a是索引。

但是對於像這樣的東西,它是非常昂貴的,因爲它需要一個表掃描。

CREATE TABLE t (a INT); 
SELECT * FROM WHERE 1 GROUP BY a; 

一般來說,如果密鑰不可用,則數據庫會在內存中的條款創建一個臨時表組,經過所有的值,用在指數的相應行插入每個值到臨時表結果集,那麼它將從臨時表中選擇,從每列中選擇第一行並將其作爲結果發回。根據是否使用每個組by子句的「額外」行(即使用MAX(),GROUP_CONCAT()或類似),它將需要再次獲取所有行。

您可以使用EXPLAIN找出MySQL將使用的策略'Extra'(按照執行成本的升序)'使用索引'(如果可以使用索引)'使用filesort'如果讀取所有行磁盤將是必要的,並且列將包含「使用臨時」(如果需要臨時)