你有一列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 的答案。