2014-12-01 70 views
1

我試圖優化仿照下面的例子查詢:PostgreSQL的指數多列WHERE子句

UPDATE posts 
SET title = "Example", lock_version = 1 
WHERE (
    posts.id = 123 
    AND 
    posts.lock_version = 0 
) 

我有posts.id唯一索引,這確保了WHERE posts.id = 123陽性命中永遠不會返回更多比一個結果。

我還需要索引posts.lock_version嗎?

我想我會需要它,如果WHERE的第一部分返回多個結果,因爲索引會縮短過濾器的速度。

但是我描述的情況如何呢?

+0

如果posts.id是主鍵(或者是唯一的:候選鍵),那麼所有其他列在功能上依賴於它,並且不需要額外的索引,因爲您總是使用PK來尋址一行, – joop 2014-12-01 18:20:05

回答

3

如果posts.id是唯一的,那麼您不需要比該列的簡單索引更多。

它不會得到更快的速度 - 相反:由於您更新了行,因此您還需要增加維護成本來更新附加索引。

旁白:你不需要在你的WHERE條款括號:

... 
WHERE id = 123 
AND lock_version = 0 

如果你雙引號"Example"它指的是該名稱的列。你可能想要的值:'Example'。字符串文字的單引號。

+0

謝謝。是的,你的格式也是正確的。 – tompave 2014-12-02 11:41:31