如何使 WHERE 子句不区分大小写:从 SQL Server 查询 Oracle 链接服务器

Pet*_*ger 2 sql-server oracle linked-server case-insensitive openquery

我们有一个MS SQL Server 2005安装,它通过链接服务器连接连接到Oracle数据库。

许多 SELECT 语句是通过一系列OPENQUERY()命令执行的。大多数这些语句中的 WHERE 子句都是针对VARCHAR列的。

我听说如果 WHERE 子句区分大小写,它会对性能产生很大影响。

所以我的问题是,如何确保以不区分大小写的方式执行非二进制字符串 WHERE 子句以获得最大性能?

Bra*_*vic 6

其实是反过来的:

区分大小写...

WHERE column = :criteria
Run Code Online (Sandbox Code Playgroud)

...将column直接使用索引并表现良好。

不区分大小写通常需要这样的东西......

WHERE UPPER(column) = UPPER(:criteria)
Run Code Online (Sandbox Code Playgroud)

......这也不能使用的指标column和表现不佳(除非你很小心,并创建一个功能上的指标UPPER(column))。

我不确定是否有OPENQUERY()任何改变,但从纯粹的 Oracle 角度来看,区分大小写和不敏感的查询都可以提高性能,不敏感的查询需要特别注意(功能索引)。