Postgresql

如何從龐大的 postgres 數據庫中查詢結果?

  • June 18, 2019

我正在嘗試查詢 125GB Postgres 數據庫中的幾個表。我發現很難快速恢復結果!

即使要找到一列的唯一行也需要 10 多分鐘。我使用命令行或 PHPMyAdmin 之類的工具來觸發查詢,等待時間保持不變。

例如:

SELECT COUNT (DISTINCT column_name) FROM table_name;

我擔心如果在這些表上使用連接操作,這個等待時間會顯著增加並且會更痛苦。

誰能提出一個可能的解決方案來快速恢復統計數據?

從表名中選擇計數(DISTINCT 列名);

實現“COUNT(DISTINCT…)”的 PostgreSQL 程式碼部分已經很老了,最近還沒有做太多的性能工作。例如,它不能利用並行處理或雜湊表。您可以使用子查詢重寫以可能利用一些更新的技術:

select count(*) from 
   (select distinct column_name from table_name where column_name is not null) as foo

但是,這並不像您想像的那麼簡單。這是一項艱鉅的任務,當輸入大量數據時可能需要很長時間。

我擔心如果在這些表上使用連接操作,這個等待時間會顯著增加並且會更痛苦。

不要發明令人擔心的事情。a 的性能COUNT(DISTINCT...)很少告訴你關於 JOIN 的性能。編寫您想要的查詢,然後擔心優化該查詢,而不是與您想要的查詢無關的其他查詢。

簡化查詢以查看其組成部分可能需要多長時間是有意義的。但COUNT(DISTINCT...)不太可能是這樣一個簡化的組成部分。

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