Postgresql

Postgresql 12 自定義雜湊函式

  • February 11, 2022

我有一個大表,我想分區。我要分區的欄位是一個包含編碼值的字元串,但顯示為儲存為字元串的整數。“數字”由 4 位數字組成。前兩個是我想要劃分的。例如,欄位值“1298”需要使用值 12 進行分區。我認為這對於具有自定義散列函式的散列分區非常有用。

供參考:... WHERE TheField = '0123'經常以或 的形式對此列進行查詢... WHERE TheField IN ('0123', '0145', '0232')

手動將每個值放入每個分區是不切實際的,因此我認為使用自定義雜湊函式將是一個實用的解決方案。

**實際問題:**如何製作此自定義雜湊函式並使用它來定義分區?

您可以按 分區substr(thefield, 1, 2),但這樣做沒有意義,除非

  • 您按該標準刪除數據

或者

  • 您的查詢使用該表達式

您應該簡單地通過 hash on 進行分區thefield,然後您的兩個查詢都可以使用分區修剪。不需要自定義散列函式。

儘管這不是對創建自定義雜湊函式問題的真正答案,但我的整體問題的解決方案是 PostgreSQL 實際上支持文本欄位上的範圍分區,如mustaccio所示。

CREATE TABLE dept (id CHAR(4) PRIMARY KEY) PARTITION BY RANGE(id);
CREATE TABLE dept_00 PARTITION OF dept FOR VALUES FROM ('0000') TO ('0099');
CREATE TABLE dept_01 PARTITION OF dept FOR VALUES FROM ('0100') TO ('0199');
...

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