你有一列foo
,某种字符串类型,在该列上有一个索引。您希望SELECT
从表WHERE
中的foo
列具有前缀'pre'
。显然,索引在这里应该可以提供帮助。
这是通过前缀搜索最明显的方法:
SELECT * FROM tab WHERE foo LIKE 'pre%';
不幸的是,这并没有得到优化以使用索引(至少在 Oracle 或 Postgres 中)。
但是,以下方法确实有效:
SELECT * FROM tab WHERE 'pre' <= foo AND foo < 'prf';
但是有没有更好的方法来实现这一点,或者有没有让上面的方法更优雅的方法?尤其是:
- 我需要一个 from
'pre'
to函数'prf'
,但这必须适用于任何基础排序规则。此外,它比上面更复杂,因为如果搜索 eg'prz'
那么上限必须是'psa'
,依此类推。 - 我可以将其抽象为存储的函数/过程并仍然命中索引吗?所以我可以写类似的东西
... WHERE prefix('pre', foo);
?
感谢所有 DBMS 的答案。