我有4代表這是postgres按整數類型列比字符類型列快?
create table web_content_3 (content integer, hits bigint, bytes bigint, appid varchar(32) );
create table web_content_4 (content character varying (128), hits bigint, bytes bigint, appid varchar(32) );
create table web_content_5 (content character varying (128), hits bigint, bytes bigint, appid integer);
create table web_content_6 (content integer, hits bigint, bytes bigint, appid integer);
我使用相同組查詢由約2個百萬條記錄 即SELECT content, sum(hits) as hits, sum(bytes) as bytes, appid from web_content_{3,4,5,6} GROUP BY content,appid;
結果是:
- Table Name | Content | appid | Time Taken [In ms]
- ===========================================================
- web_content_3 | integer | Character | 27277.931
- web_content_4 | Character | Character | 151219.388
- web_content_5 | Character | integer | 127252.023
- web_content_6 | integer | integer | 5412.096
這裏web_content_6查詢到各地5secs只比較其他三個組合,使用這個統計我們可以說整數,整數組合爲更快,但問題是爲什麼?
我也有EXPLAIN結果,但它確實給了我關於web_content_4和web_content_6查詢之間劇烈變化的任何解釋。
它在這裏。
test=# EXPLAIN ANALYSE SELECT content, sum(hits) as hits, sum(bytes) as bytes, appid from web_content_4 GROUP BY content,appid;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=482173.36..507552.31 rows=17680 width=63) (actual time=138099.612..151565.655 rows=17680 loops=1)
-> Sort (cost=482173.36..487196.11 rows=2009100 width=63) (actual time=138099.202..149256.707 rows=2009100 loops=1)
Sort Key: content, appid
Sort Method: external merge Disk: 152488kB
-> Seq Scan on web_content_4 (cost=0.00..45218.00 rows=2009100 width=63) (actual time=0.010..349.144 rows=2009100 loops=1)
Total runtime: 151613.569 ms
(6 rows)
Time: 151614.106 ms
test=# EXPLAIN ANALYSE SELECT content, sum(hits) as hits, sum(bytes) as bytes, appid from web_content_6 GROUP BY content,appid;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=368814.36..394194.51 rows=17760 width=24) (actual time=3282.333..5840.953 rows=17760 loops=1)
-> Sort (cost=368814.36..373837.11 rows=2009100 width=24) (actual time=3282.176..3946.025 rows=2009100 loops=1)
Sort Key: content, appid
Sort Method: external merge Disk: 74632kB
-> Seq Scan on web_content_6 (cost=0.00..34864.00 rows=2009100 width=24) (actual time=0.011..297.235 rows=2009100 loops=1)
Total runtime: 6172.960 ms
因爲比較。比較整數而不是「字符串」的速度更快 – StanislavL
可能在字符串的情況下,它按字符比較進行字符比較,所以在排序的情況下也需要時間..您也可以在解釋計劃中看到。 –
任何這些表上的索引? –