我正在尝试在查询中连接来自不同数据库的两个表。它们具有不同的排序规则类型。主DB具有排序规则: SQL_Latin1_General_CP1_CS_AS
我要加入的数据库具有排序规则: SQL_Latin1_General_CP1_CI_AS
当我尝试运行而没有整理(显然)时,我收到此错误:
无法解决之间的排序规则冲突 " SQL_Latin1_General_CP1_CS_AS"和" SQL_Latin1_General_CP1_CI_AS"在 等于操作。
我对整理很陌生,所以我不知道该怎么做。如果我从查询中删除第二个DB的方面,它会立即运行。一旦我开始使用联接,查询将运行一小时+但没有结果。
如果您需要更多背景信息,请与我们联系。
答案 0 :(得分:0)
正如评论中所讨论的那样,在查询中对列进行排序,使语句成为非SARGable。这就是为什么您看到重要的性能损失,因为您无法使用索引。
如果您需要在2个数据库上保持不同的排序规则,那么一种方法是添加PERSISTED
计算列。然后,您可以在该列上添加索引。这将保持SARGability。
如果您要保留非CaseSensitivity,则需要在Case Sensitive数据库中创建计算列。我不知道您的列的名称,但您的计算列的yuour语句将类似于:
ALTER TABLE YourTable ADD YourColumn_CI AS YourColumn COLLATE SQL_Latin1_General_CP1_CI_AS PERSISTED;
然后,您也可以在该新列上创建索引,并且 应该获得性能优势。
编辑:作为一个非常简单的示例索引:
CREATE INDEX YourColumn_CI_IX ON YourTable (YourColumn_CI ASC);