2013-03-19 50 views
4

需要提出一種有效地執行查詢的方法,WHERE子句中的數組和整數列由時間戳列排序。使用PostgreSQL 9.2。有效查詢包含PostgreSQL中的數組列的條件的表

我們需要執行的查詢是:

SELECT id 
from table 
where integer = <int_value> 
    and <text_value> = any (array_col) 
order by timestamp 
limit 1; 

int_value是一個整數值,並text_value是1 - 3字母文本值。

表結構是這樣的:

 
    Column  |   Type    |  Modifiers 
---------------+-----------------------------+------------------------ 
id   | text      | not null 
timestamp  | timestamp without time zone | 
array_col  | text[]      | 
integer  | integer      | 

我應該如何設計指標/修改查詢,以使其儘可能高效?

非常感謝!如果需要更多信息,請告知我,我會盡快更新。

回答

2

PG可以使用陣列上的索引,但是你必須使用數組運算符來代替<text_value> = any (array_col)使用ARRAY[<text_value>]<@array_colhttps://stackoverflow.com/a/4059785/2115135)。如果可以查看您創建的是否有效,則可以使用命令SET enable_seqscan=false;強制pg使用索引。不幸的是GIN索引不能在整數列上創建,所以你將不得不爲這兩列創建兩個不同的索引。 請參閱此處的執行計劃:http://sqlfiddle.com/#!12/66a71/2

+0

好的,謝謝。那麼順序呢?我如何解決這個問題? – 2013-03-19 17:00:40

+0

哦,我錯過了。在這種情況下,'index(integer,timestamp)'應該比'(integer)'和'(timestamp)'上的兩個單獨索引快,但是我恐怕這比我的水平高一點,所以我不能保證你應該嘗試一下。 – 2013-03-19 17:21:21

相關問題