在比较可能包含不同情况的值的列时,最好使用什么? 整理更快? 试图解决这个问题,因为在我们的项目中进行了大量的数据比较。 我们使用:
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)
答案 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会产生类似的影响。