Postgresql
GROUP BY select-list-ref 是否不如 GROUP BY colname 優化?
只是想知道是否
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 #
僅當結果集的列是單射函式時,此警告才適用。這是證明它可以重要,而不是證明它確實重要。