Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 永无止境的选择与麻烦的内部连接_Sql_Sql Server_Inner Join - Fatal编程技术网

Sql 永无止境的选择与麻烦的内部连接

Sql 永无止境的选择与麻烦的内部连接,sql,sql-server,inner-join,Sql,Sql Server,Inner Join,我有两张桌子: 查询为(简短版本): 我一辈子也弄不明白为什么它不起作用——也就是说,从来没有完成过执行——运行了13个小时,但仍然没有完成的迹象 Documents表大约有1200万行,ClientMatters大约有330000行 原始查询还有其他几个左连接,这是唯一的内部连接。如果我忽略它,查询将在20秒内完成 现在是凌晨4点,所以我要么失去了它,要么错过了一些明显的东西。PS-我确实重建了索引。Custom2字段是一组索引字段的一部分(参见图) 感谢您的帮助-谢谢 我看到的问题之一

我有两张桌子:

查询为(简短版本):

我一辈子也弄不明白为什么它不起作用——也就是说,从来没有完成过执行——运行了13个小时,但仍然没有完成的迹象

Documents表大约有1200万行,ClientMatters大约有330000行

原始查询还有其他几个左连接,这是唯一的内部连接。如果我忽略它,查询将在20秒内完成

现在是凌晨4点,所以我要么失去了它,要么错过了一些明显的东西。PS-我确实重建了索引。Custom2字段是一组索引字段的一部分(参见图)


感谢您的帮助-谢谢

我看到的问题之一是

  • mat.MCode
    属于
    varchar(27)
  • D.custom2
    属于
    nvarchar(32)
当连接时,这是非常可怕的(性能方面的)-一列是Unicode,另一列不是

试着把一个抛给另一个,类似这样:

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)