【问题标题】:SQL Server: COLLATE CS->CI performance vs UPPERSQL Server:整理 CS->CI 性能与 UPPER
【发布时间】:2010-09-01 09:02:42
【问题描述】:

比较可能包含不同情况的值的列时,最好使用什么方法? 整理更快吗? 只是想弄清楚这一点,因为在我们的项目中进行了大量的数据比较。 我们使用:

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)

【问题讨论】:

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


    【解决方案1】:

    你试过了吗?

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

    我个人会使用 UPPER,因为它更明显。使用 UPPER 也会告诉我这些列是区分大小写的。

    编辑,2012 年 10 月

    UPPER 具有独立于排序规则的优势。

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

    【讨论】:

    • 我也是 - UPPER 更明显。但是我发现在我们的项目中使用了 Collat​​e,并且不确定“最佳实践”。无论如何感谢您的回答。我会尝试两者并选择。
    【解决方案2】:

    刚刚解决了一个类似的问题,在 LOWER 上使用 collat​​e 非常重要 - 1:20 用于 LOWER 的查询(通常超过 5 或 6 次运行),而 :01-:07 用于整理。显然这不是一项科学研究,但看起来整理是/可以更有效,即使它看起来更丑陋。 (SQL 2008 R2,顺便说一句 - 可能会有所作为)。还假设 LOWER 与 UPPER 会产生类似的影响。

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多