SQL Server:COLLATE CS-> CI性能与UPPER

时间:2010-09-01 09:02:42

标签: sql-server sql-server-2005 tsql

在比较可能包含不同情况的值的列时,最好使用什么? 整理更快? 试图解决这个问题,因为在我们的项目中进行了大量的数据比较。 我们使用:

select * from table t1, table t2 where 
t1.col1 collate SQL_Latin1_General_CP1_CI_AS = t2.colb collate SQL_Latin1_General_CP1_CI_AS 

为什么我们不能改写为:

select * from table t1, table t2 where 
UPPER(t1.col1)  = UPPER(t2.colb)

2 个答案:

答案 0 :(得分:2)

你试过吗?

我建议他们同样糟糕,因为函数/ ​​COLLATE无法使用索引。 与扫描大型桌子相比,COLLATE或UPPER之一的开销很小。

我会亲自使用UPPER,因为它更明显。 UPPER的使用也告诉我无论如何列都是区分大小写的。

编辑,2012年10月

UPPER具有独立整理的优势。

使用COLLATE需要强制代码页,基本上。 UPPER不会。因此,您可以保留预期的排序/比较逻辑,而不是强制使用标准拉丁语。

答案 1 :(得分:2)

正在处理类似的问题,并且在LOWER上使用整理是很重要的 - 对于LOWER,查询(通常超过5或6次运行)为1:20,而对于:01-:07进行整理。显然,这不是一项科学研究,但即使看起来更丑陋,它似乎也可以更高效。 (SQL 2008 R2,BTW - 可能会有所作为)。还假设LOWER与UPPER会产生类似的影响。