我刚刚发现一些特定的模式在与 LIKE 文本运算符一起使用时使用 BTREE 索引来加速查询,例如:
- 'abc123'(没有通配符的文本)
- 'abc%'(最后只有一个通配符的文本)
使用仅使用大于/小于/等于运算符'%'
的模式末尾(例如)仅存在一个通配符的模式的 LIKE 文本运算符的等价物是什么?"a_column" LIKE 'abc%'
我的兴趣是在 PostgreSQL 中实现这一点,但这可能是一个 SQL 标准问题。
我刚刚发现一些特定的模式在与 LIKE 文本运算符一起使用时使用 BTREE 索引来加速查询,例如:
使用仅使用大于/小于/等于运算符'%'
的模式末尾(例如)仅存在一个通配符的模式的 LIKE 文本运算符的等价物是什么?"a_column" LIKE 'abc%'
我的兴趣是在 PostgreSQL 中实现这一点,但这可能是一个 SQL 标准问题。
一般来说,没有办法用
>=
和<
操作替换通配符搜索。考虑这个例子:所以在捷克没有办法
LIKE 'abc%'
用常规的不等式运算符代替。唯一始终有效的排序规则是二进制排序规则
C
(或POSIX
)。或者,您可以使用不等式运算符~>=~
and~<~
,它们逐个字符地比较字符串。为什么不使用正确的解决方案并创建这样的索引:
这个索引可以加速你的两个
LIKE
表达式,并且不需要重写查询。"a_column" >= 'abc' AND "a_column" < 'abd'
应该等于"a_column" LIKE 'abc%'
-'abc'
将匹配,因为它等于搜索词,并且任何以开头的字符串abc
都将大于它但小于abd
。这是假设您的排序规则设置为您将获得二进制比较,您将需要一些额外的思考来使事情按照不区分大小写或不区分重音的比较工作。