繁体   English   中英

执行不区分大小写的 like 表达式的最有效方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM