我正在嘗試選擇一個表,其中我有 3 或 4 列,我想將這些列與具有 1,000 或 10,000 的陣列/串列(使用函式作為引數傳遞)進行匹配,但它花費了太多時間,我閱讀了使用索引可能會有所幫助,但在查詢期間仍然表現不佳。
這是我的查詢:
SELECT
"id", "parcel_number", "alternate_parcel_number", "parcel_tax_number"
FROM "addresses"
WHERE
"parcel_number" IN ('A080100', ... 'A0368895224')
OR "alternate_parcel_number" IN ('A080100', ... 'A0368895224')
OR "parcel_tax_number" IN ('A080100', ... 'A0368895224');
對于 1000 行的陣列/串列,回傳結果大約需要 2 分鐘。
謝謝。
uj5u.com熱心網友回復:
我在網站上找到了一個解決方案,更改為 VALUES 可以極大地提高速度。
網址:https : //www.datadoghq.com/blog/100x-faster-postgres-performance-by-changed-1-line/
SELECT
"id", "parcel_number", "alternate_parcel_number", "parcel_tax_number"
FROM "addresses"
WHERE
"parcel_number" = ANY (VALUES ('A080100'), ... ('A0368895224'))
OR "alternate_parcel_number" = ANY (VALUES ('A080100'), ... ('A0368895224'))
OR "parcel_tax_number" = ANY (VALUES ('A080100'), ... ('A0368895224'));
uj5u.com熱心網友回復:
不建議將 10.000 個值作為引數傳遞給函式。當我需要這樣做時,我的解決方案是:
將所有引數插入臨時表并將所有引數關聯到一個鍵值:
CREATE TEMP_TABLE (PARAM_KEY INT, PARCEL_NO INT);
僅將鍵值傳遞給函式
運行查詢:
從“地址”中選擇 id、parcel_number、alternate_parcel_number、parcel_tax_number 加入 temp_table onparcel_number = temp_param WHERE PARAM_key = :param_key
聯盟
選擇 id、parcel_number、alternate_parcel_number、parcel_tax_number FROM “addresses”加入 temp_table onalternate_parcel_number = temp_param WHERE PARAM_key = :param_key
聯盟
從“地址”中選擇 id、parcel_number、alternate_parcel_number、parcel_tax_number 加入 temp_table onparcel_tax_number = temp_param WHERE PARAM_key = :param_key;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360562.html
標籤:PostgreSQL的
上一篇:如何根據列獲得百分比
