【发布时间】:2018-03-24 14:47:55
【问题描述】:
在优化查询方面我非常缺乏经验,因此非常感谢任何帮助。
我目前有一个 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'
据我所知,所有列都没有索引。哪些列最适合添加索引?
表格行:
客户:80,000 行
行:550,000 行
销售:1,300,000 行
我最初已将其更改为先加入较小的表,但似乎没有太大区别。
谢谢
【问题讨论】:
-
As far as im aware none of the columns have indexes.为什么? -
@Siyual 这就是别人设置的方式
-
那么修复它。缺乏索引是很成问题的。这些表上有主键吗?
-
嗯,显而易见的解决方案是查看查询计划,并为表添加索引。特别是在
Sale.Date列上。 -
我怀疑您的查询在逻辑上存在缺陷。这就是为什么您应该为所涉及的表发布 DDL。我不知道“Line”代表什么,但客户与销售相关联听起来很合适。在 Line.No 上同时加入客户和销售似乎非常可疑。
标签: sql sql-server join optimization