Sql 永无止境的选择与麻烦的内部连接
我有两张桌子: 查询为(简短版本): 我一辈子也弄不明白为什么它不起作用——也就是说,从来没有完成过执行——运行了13个小时,但仍然没有完成的迹象 Documents表大约有1200万行,ClientMatters大约有330000行 原始查询还有其他几个左连接,这是唯一的内部连接。如果我忽略它,查询将在20秒内完成 现在是凌晨4点,所以我要么失去了它,要么错过了一些明显的东西。PS-我确实重建了索引。Custom2字段是一组索引字段的一部分(参见图)Sql 永无止境的选择与麻烦的内部连接,sql,sql-server,inner-join,Sql,Sql Server,Inner Join,我有两张桌子: 查询为(简短版本): 我一辈子也弄不明白为什么它不起作用——也就是说,从来没有完成过执行——运行了13个小时,但仍然没有完成的迹象 Documents表大约有1200万行,ClientMatters大约有330000行 原始查询还有其他几个左连接,这是唯一的内部连接。如果我忽略它,查询将在20秒内完成 现在是凌晨4点,所以我要么失去了它,要么错过了一些明显的东西。PS-我确实重建了索引。Custom2字段是一组索引字段的一部分(参见图) 感谢您的帮助-谢谢 我看到的问题之一
感谢您的帮助-谢谢 我看到的问题之一是
属于mat.MCode
varchar(27)
属于D.custom2
nvarchar(32)
SELECT TOP (2000) *
FROM [...].[Documents] AS [D]
INNER JOIN dbo.SE_CMSClientMatters AS [mat]
ON CAST([mat].[Mcode] AS NVARCHAR(32)) = [D].[custom2]
作为一般规则,您应该始终尝试在用于联接的列中使用相同的数据类型,并且在数值数据类型上联接通常比基于字符串的数据类型更容易、更快
如果您可以-尝试将这两列中的一列转换为与另一列相同的数据类型-我非常确定这将大大加快速度
另外:如果文档
上的索引位于Custom2
的第二个位置,则不能用于此联接-尝试单独在Custom2
上创建一个单独的索引:
CREATE NONCLUSTERED INDEX IX_Documents_custom2 ON dbo.Documents(custom2)
工作得很有魅力-28秒就完成了!非常感谢你!
CREATE NONCLUSTERED INDEX IX_Documents_custom2 ON dbo.Documents(custom2)