Postgresql

Postgresql 可以在計劃中利用“意外”集群嗎?

  • November 30, 2020

假設我有一個包含列customer_id(隨機生成的字元串)和的僅附加表x,並且查找總是在customer_id.

假設數據如下所示,就好像我們在客戶最初註冊某項時獲得了一批行,然後再也沒有為該客戶註冊。

customer_id=XCVFY0001, x=...
customer_id=XCVFY0001, x=...
(continues for ~1 page with same customer_id)
customer_id=HUMBN0001, x=...
customer_id=HUMBN0001, x=...
(continues for ~1 page with same customer_id)
(and so on...)

因此,雖然customer_id的字母順序與物理行無關,但我們可以做出如下陳述:

  • 每頁很少有不同的客戶 ID
  • 每個 ID 有幾頁
  • 有很長的“執行”ID,或者,如果您需要一個customer_id,您可能會在幾個連續的頁面上找到它
  • 就資訊論而言,我認為他們會說沒有相關性,但存在很高的“互資訊”

如果沒有明確執行,查詢規劃器可以在估計中使用這樣的資訊CLUSTER嗎?我假設如果correlation報告中的低pg_stats,它會猜測行在整個頁面中均勻分佈,並且可能對各種計劃持悲觀態度。

(在我的現實世界模擬中,一個普通的非聚集索引無論如何都能讓事情變得又好又快,但是當我注意到數據中的模式時我只是好奇。)

規劃者不知道這種類型的分群,因此無法根據它做出決策。

ANALYZE 使用的兩步採樣方法在這種情況下會產生傾斜的樣本,可能導致對 n_distinct 的嚴重低估。如果不深入研究單個查詢的細節,就很難預測這可能會產生什麼後果。

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