Postgresql

GROUP BY select-list-ref 是否不如 GROUP BY colname 優化?

  • July 13, 2017

只是想知道是否GROUP BY 1比 慢GROUP BY col

SELECT x, count(x)
FROM foo
GROUP BY 1;

它顯然可以在事件x中不是一個簡單的列名。如果它是一個簡單的列名,則無關緊要。以這個樣本集為例。

CREATE TABLE foo
AS
 SELECT now()::date AS x
 FROM generate_series(1,1e6);

這將創建一個包含 1,000,000 行的樣本集。現在看看以下。

SELECT to_char(x,'YYYY-MM-DD'), count(*)
FROM foo
GROUP BY 1;

然而,以上需要820.066 ms..

SELECT x, count(*)
FROM foo
GROUP BY x;

以上只190ms需要,需要將其恢復為首選格式嗎?再包起來SELECT

SELECT to_char(x,'YYYY-MM-DD') AS x, count
FROM (
 SELECT x, count(*)
 FROM foo
 GROUP BY x
) AS t;

而且,它仍然只需要 190 毫秒。如果您有索引和有用的數據,事情會變得更加棘手。然後,您可能會在不需要時訪問表,或者您可能在 seq 掃描中排序,而索引遍曆本來可以工作。

需要注意的是,GROUP BY #僅當結果集的列是單射函式時,此警告才適用。這是證明它可以重要,而不是證明它確實重要。

引用自:https://dba.stackexchange.com/questions/179790