正如我們所知道的那樣,前綴長度列可以在索引創建期間添加。例如在MySQL中,如何在postgresql中添加前綴長度索引?
alter table j1 add index idx_j1_str1 (str1(5));
我搜索google.com和stackoverflow.com後,我沒有發現任何的PostgreSQL相當於解決方案。
那麼任何人都可以告訴我,除了函數索引postgresql的答案。
任何回覆將不勝感激。
正如我們所知道的那樣,前綴長度列可以在索引創建期間添加。例如在MySQL中,如何在postgresql中添加前綴長度索引?
alter table j1 add index idx_j1_str1 (str1(5));
我搜索google.com和stackoverflow.com後,我沒有發現任何的PostgreSQL相當於解決方案。
那麼任何人都可以告訴我,除了函數索引postgresql的答案。
任何回覆將不勝感激。
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%'
或者使用通配符進行任何其他前綴搜索。
謝謝。但我必須寫這樣的查詢「where left(str1,5)='...'」,否則不能使用索引。 –
@Moon_of_father:使用'where left(str1,5)'**將**在Postgres中使用上述索引的查詢,請參閱我的編輯。 –
因爲我有一個像mysql這樣的列「str1 text,key idx_str1_prefix5(str1(5))...」。我想將其遷移到postgresql而不做任何更改。 –