优化连接SQL Server

问题描述:

我对于优化查询非常缺乏经验,因此非常感谢您的帮助。优化连接SQL Server

我目前有3路加入,需要+10分钟执行。我目前正试图对此进行测试,因此必须等待很长时间并不理想。有什么办法可以让它变得更快吗?

目前查询:

SELECT 
DISTINCT 
S.[No], 
S.[Date], 
S.[No], 
L.[No], 
C.[Name], 
C.[E-Mail], 
C.[Order] 
FROM [Customer] C 
JOIN [Line] L 
ON C.[No] = L.[No] 
JOIN [Sale] S 
ON S.[No] = L.[No] 
WHERE S.[Date] >= '2017-04-01' 
AND L.[Type] = '2' 
AND C.[Type] = '2' 

至于列的IM知道有没有指标。哪一个是添加索引的最佳列?

表行:

客户:80000行

线:55万行

销售:130万行

我已初步改变了这种先加入的小表,但它不”似乎有很大的不同。

感谢

+3

'据我所知,没有列有索引。“为什么? – Siyual

+0

@Siyual就是其他人设置的方式 –

+0

那就修好吧。缺乏索引是非常有问题的。你在这些表上有主键吗? –

这是您的查询:

SELECT DISTINCT S.[No], S.[Date], S.[No], L.[No], 
     C.[Name], C.[E-Mail], C.[Order] 
FROM [Customer] C JOIN 
    [Line] L 
    ON C.[No] = L.[No] JOIN 
    [Sale] S 
    ON S.[No] = L.[No] 
WHERE S.[Date] >= '2017-04-01' AND L.[Type] = '1' AND C.[Type] = '1'; 

这里是建议:

  1. 删除SELECT DISTINCT,除非你真的需要它。这增加不必要的开销。
  2. 如果Type是数字,则将'1'更改为1。我会猜测它。
  3. 在所有连接键上添加索引。
  4. 检查连接。 。 。如果同一列用于所有表格,我会感到惊讶。
  5. 您可能需要WHERE子句中的列的索引。但是,我怀疑连接键是真正的性能问题。

在正常情况下,这样的大小的三个表上的查询不应该花费10分钟,这就是为什么我怀疑连接键不好。

+0

是否有添加索引可能导致的任何问题?在数据库的其余部分? –

+0

@RyanGadsdon。 。 。索引在磁盘上占用更多空间并占用内存。它们还会减慢插入,更新并删除一点(通常很小)。 –