2014-02-17 77 views
1

正如我們所知道的那樣,前綴長度列可以在索引創建期間添加。例如在MySQL中,如何在postgresql中添加前綴長度索引?

alter table j1 add index idx_j1_str1 (str1(5)); 

我搜索google.com和stackoverflow.com後,我沒有發現任何的PostgreSQL相當於解決方案。

那麼任何人都可以告訴我,除了函數索引postgresql的答案。

任何回覆將不勝感激。

+0

因爲我有一個像mysql這樣的列「str1 text,key idx_str1_prefix5(str1(5))...」。我想將其遷移到postgresql而不做任何更改。 –

回答

3
create index idx_j1_str on j1 (left(str1,5)); 

但我不認爲你在Postgres需要這樣的東西。只有str1的索引可能更通用。但是,當然,這很大程度上取決於你運行的查詢 - 你沒有向我們展示,所以不可能說出你真正需要什麼類型的索引。

要使用的功能基於指數的Postgres的查詢需要包含相同的表達,你用到索引(基本上支持他們的任何其他DBMS):

select * 
from j1 
where left(str1,5) = '1234' 

會使用上述索引(如果它是有意義的,例如,如果表格足夠大並且條件大幅減少整體結果)。

如果創建該列有普通索引:

create index idx_j1_str on j1 (str1 varchar_pattern_ops); 

那麼它可以用於類似:

select * 
from j1 
where str1 like '1234%' 

(這相當於left(str1,5) = '1234'),但它可以用於:

select * 
from j1 
where str1 like '1234678%' 

或者使用通配符進行任何其他前綴搜索。

+1

謝謝。但我必須寫這樣的查詢「where left(str1,5)='...'」,否則不能使用索引。 –

+0

@Moon_of_father:使用'where left(str1,5)'**將**在Postgres中使用上述索引的查詢,請參閱我的編輯。 –