优化连接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万行
我已初步改变了这种先加入的小表,但它不”似乎有很大的不同。
感谢
答
这是您的查询:
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';
这里是建议:
- 删除
SELECT DISTINCT
,除非你真的需要它。这增加不必要的开销。 - 如果
Type
是数字,则将'1'
更改为1
。我会猜测它。 - 在所有连接键上添加索引。
- 检查连接。 。 。如果同一列用于所有表格,我会感到惊讶。
- 您可能需要
WHERE
子句中的列的索引。但是,我怀疑连接键是真正的性能问题。
在正常情况下,这样的大小的三个表上的查询不应该花费10分钟,这就是为什么我怀疑连接键不好。
+0
是否有添加索引可能导致的任何问题?在数据库的其余部分? –
+0
@RyanGadsdon。 。 。索引在磁盘上占用更多空间并占用内存。它们还会减慢插入,更新并删除一点(通常很小)。 –
'据我所知,没有列有索引。“为什么? – Siyual
@Siyual就是其他人设置的方式 –
那就修好吧。缺乏索引是非常有问题的。你在这些表上有主键吗? –