您有一列字符串foo
,該字段類型爲該列的索引。你想從表SELECT
的表WHERE
foo
列有前綴'pre'
。顯然,該指數應該能夠在這裏幫助。使用索引按字符串前綴進行選擇
這裏是由前綴搜索的最明顯的方式:
SELECT * FROM tab WHERE foo LIKE 'pre%';
不幸的是,這並沒有得到優化使用索引(在Oracle或Postgres的,至少)。
以下,然而,確實工作:
SELECT * FROM tab WHERE 'pre' <= foo AND foo < 'prf';
但是否有更好的方法來做到這一點,還是有使上述更優雅的方式?特別是:
- 我需要從
'pre'
到'prf'
的功能,但是這對於任何潛在的整理工作。而且,它比上面更復雜,因爲如果搜索例如'prz'
那麼上限必須是'psa'
,依此類推。 - 我可以抽象成一個存儲的函數/過程,仍然打索引?所以我可以寫一些像
... WHERE prefix('pre', foo);
?
解答所有DBMSes讚賞。
什麼?不幸的是,這'這會得到優化使用索引'?這件事很糟糕嗎?當然,如果可能的話,'開始'搜索使用索引。感謝上帝,它確實。 ....我誤解了你嗎? – alzaimar 2013-03-23 22:20:16
哈哈,對不起,我不小心這個詞「不」!編輯 – jameshfisher 2013-03-23 22:33:34
哦,你的意思是在SQL中有一個「開始」構造?我找不到任何關於此的信息。 – jameshfisher 2013-03-23 22:36:17