gpt4 book ai didi

sql - 永远不会结束带有麻烦的内连接的选择

转载 作者:行者123 更新时间:2023-12-02 03:11:39 25 4
gpt4 key购买 nike

我有两个表:

enter image description here

enter image description here

enter image description here

查询是(简短版本):

SELECT TOP (2000) *
FROM [...].[Documents] AS [D]
INNER JOIN dbo.SE_CMSClientMatters AS [mat] ON [mat].[Mcode] = [D].[custom2]

我一生都无法弄清楚为什么它不起作用 - 即从未完成执行 - 运行了 13 个小时,但仍然没有完成的迹象。

Documents 表约有 1200 万行,ClientMatters 约有 330,000 行。

原始查询还有其他几个左联接,这是唯一的内部联接。如果我省略它,查询将在 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]

作为一般规则,您应该始终尝试在用于连接的列中使用相同的数据类型 - 并且在上连接通常更容易、更快>数字数据类型,而不是基于字符串的数据类型。

如果可以 - 尝试将这两列之一转换为与另一列相同的数据类型 - 我很确定这会显着加快速度。

此外:Documents 上的索引(其中 Custom2 位于第二个位置)将不能用于此连接 - 尝试单独在 custom2 上创建单独索引:

CREATE NONCLUSTERED INDEX IX_Documents_custom2 ON dbo.Documents(custom2)

关于sql - 永远不会结束带有麻烦的内连接的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com