[英]What's the most efficient way to do a case-insensitive like expression?
在Pervasive v13中,是否有比下面所示的“更高效”的方式来执行不区分大小写的like 表达式?
select * from table_name
where upper(field_name) like '%TEST%'
上面的 UPPER function 具有我想避免的性能成本。
我不同意那些说 UPPER 的性能开销很小的人; 与没有 UPPER 的完全相同的查询相比,它的执行时间加倍。
背景:
我对这个类似通配符的表达式的执行时间非常满意,直到我意识到结果集由于大小写不匹配而缺少记录。
然后,我实施了 UPPER 技术(上图)。 这实现了包括那些丢失的记录,但它使我的查询的执行时间加倍。
这种 UPPER 技术用于不区分大小写的比较,即使在概念层面上对我来说似乎也异常密集。 对于大型数据库表中的每条记录,我希望 SQL 标准提供某种类型的语法标志,而不是更改字段的大小写,以修改 like-expression 关于区分大小写的行为。
从那里,在幕后,数据库引擎可以生成一个编译的正则表达式(或其他一些优化的不区分大小写的评估器),它可以很好地胜过这种 UPPER 技术。 这似乎是一种可能存在的可能性。
但是,我必须承认,在某种程度上仍然必须进行转换才能进行字母比较。 也许,这种 UPPER 技术并不比任何其他可能获得相同结果集的方法差。
无论如何,我发布这个问题是希望有人能揭示我不知道的更高效的语法。
当您使用CASE
定义表时,您不需要UPPER
。
CASE 关键字导致 PSQL 在评估涉及字符串列的限制子句时忽略大小写。 CASE 可以在 CREATE TABLE 或 ALTER TABLE 语句中或在 SELECT 语句的 ORDER BY 子句中指定为列属性。
(参见: https://docs.actian.com/psql/psqlv13/index.html#page/sqlref%2Fsqlref.CASE_(string).htm )
CREATE TABLE table_name (field_name VARCHAR(100) CASE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.