Chr*_*ris 3 sql-server collation t-sql
我正在为一个报告创建一个查询,我们必须在其中进行跨数据库连接。不幸的是,我们必须加入的字段有两个单独的排序规则——“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”。这些之间的连接非常缓慢,并且确实影响了报告的速度 - 有什么方法可以优化它吗?更改排序规则以匹配明智和/或困难吗?
查询的连接部分如下
INNER JOIN EDE.dbo.DeliveryDetail D
ON D.DeliveryNoteNo COLLATE database_default = Consignments.CustomerReference COLLATE database_default
Run Code Online (Sandbox Code Playgroud)
Bre*_*zar 11
如果您可以向表中添加列,则可以尝试持久化计算列,并为它们编制索引。例如:
ALTER TABLE dbo.DeliveryDetail ADD DeliveryNoteNo_Collated COLLATE whatever PERSISTED;
CREATE INDEX IX_DeliveryDateNo_Collated ON dbo.DeliveryDetail(DeliveryNoteNo_Collated);
Run Code Online (Sandbox Code Playgroud)
您基本上是在插入时预先烘焙转换后的字段版本(并自动为您保持更新),并为它们编制索引。
有两个非常大的缺点。首先,这些是表中的新列:它们将占用更多空间,索引将占用更多空间,如果您的应用程序在没有明确列出其列名的情况下进行插入,则它们的插入将失败。
其次,如果应用程序的连接选项设置不正确,您的删除/更新/插入操作实际上可能会失败。NUMERIC_ROUNDABORT 必须设置为 OFF,并且 ANSI_NULLS、ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、CONCAT_NULL_YIELDS_NULL 和 QUOTED_IDENTIFIER 都必须设置为 ON。您肯定希望首先在开发中对此进行测试,为了获得奖励,请在生产中检查 sys.dm_exec_sessions 以检查每个人的会话设置。
欲了解更多信息:
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |