我有一個表R從哪個想要選擇3前任或後繼基於z列。我在z列上有一個btree索引。Postgresql排序和限制
SELECT key, z, x, y FROM R
WHERE z <= some_value
ORDER BY z DESC
LIMIT 3
檢索「沒有時間」,但
SELECT key, z, x, y FROM R
WHERE z >= some_value
ORDER BY z ASC
LIMIT 3
是無用的檢索下一個條目,因爲是開始通過有ž> = SOME_VALUE的所有行掃描的前輩。解釋給出了關於如何滿足查詢的相同解釋。 這是爲什麼,我該怎麼辦?
編輯: 實際上有兩個指標,一個升序和一個降序。 對上述兩個查詢的解釋說: 「Limit(cost = 0.00..31.91 rows = 3 width = 20)」 「 - >使用r上的zreverse向後索引掃描(cost = 0.00..17727815.24 rows = 1666667 width = 20 )「 」篩選器:(z> = some_value「)
您能否將這兩個查詢的EXPLAIN輸出發佈給我們?有關如何使用此命令,請參閱http://www.postgresql.org/docs/current/static/using-explain.html。 –
您是否嘗試過'解釋分析'而不是'解釋'? –
問題是用簡單的函數來計算some_value這裏爲了清楚起見省略了......它被定義爲volatile,它使得它被分別計算爲每一行。 – PLaine