SQL Collation Issue on JOIN clause -- EXTREMELY slow runtime
我试图在一个查询中连接来自不同数据库的两个表。它们有不同的归类类型。主数据库有整理: SQL_Latin1_General_CP1_CS_AS
我想加入的数据库有排序规则:SQL_Latin1_General_CP1_CI_AS
当我尝试在没有整理的情况下运行时出现此错误(显然):
Cannot resolve the collation conflict between
"SQL_Latin1_General_CP1_CS_AS" and"SQL_Latin1_General_CP1_CI_AS" in
the equal to operation.
我对整理不熟悉,所以我不知道该怎么办。如果我从查询中删除第二个数据库的方面,它会立即运行。一旦我开始使用连接,查询就会运行一个小时而没有结果。
如果您需要更多背景信息,请告诉我。
正如评论中所讨论的,在查询中更改列的排序规则会使语句不可 SARGable。这就是为什么您看到性能显着下降的原因,因为您无法使用索引。
如果您需要在 2 个数据库上保持不同的排序规则,那么一种方法是添加一个
如果它是您想要保留的非区分大小写,那么您需要在区分大小写的数据库中创建计算列。我不知道您的列的名称,但是您的计算列的语句类似于:
1 | ALTER TABLE YourTable ADD YourColumn_CI AS YourColumn COLLATE SQL_Latin1_General_CP1_CI_AS PERSISTED; |
然后您也可以在该新列上创建索引,您应该会获得性能优势。
编辑:作为一个非常简单的例子索引:
1 | CREATE INDEX YourColumn_CI_IX ON YourTable (YourColumn_CI ASC); |