以下是我创建的以下查询,运行大约需要38秒。
SELECT
PartNo,
SerialNo,
HeciCode,
ScanDate,
OrderType,
PoNo,
po.IssueDate,
SoNo
FROM ScanHistory sh WITH (NOLOCK)
LEFT OUTER JOIN trkRWPOHeader po WITH (NOLOCK)
ON sh.PoNo = po.PONum
WHERE len(PoNo) > 2
AND ScanDate > '1/1/2009'
AND PartNo = 'RDH102472'
AND sh.SerialNo NOT IN (SELECT SerialNo
FROM ScanHistory WITH (NOLOCK)
WHERE PONo = ''
OR (OrderType = 'SO' AND SoNo = '000001')
)
AND sh.SerialNo NOT IN (SELECT i.SerialNo
FROM skp_SkidItem i with (nolock)
INNER JOIN skp_Skid sk with (nolock)
ON i.SkidNo = sk.SkidNo
WHERE sk.SkidStatus = 'Shipped'
or i.ItemStatus = 'Shipped'
)
ORDER BY PoNo
在Sql Server Activity监视器的Recent Expensive Queries部分下,它向我显示了执行计划,其中包含以下建议(或问题):
Missing Index (Impact 51.4221): CREATE NONCLUSTERED INDEX [<name of missing index, sysname,>] ON dbo.ScanHistory (PartNo, ScanDate)
我的问题是:
如何根据我的查询创建此非聚集索引?
我在Sql Server中编写了几个复杂的查询,但实际上还没有深入研究非聚簇索引。任何帮助将不胜感激!
答案 0 :(得分:1)
SSMS提供的推荐索引并不总是最好的。
如果这是在工作中,或者如果这是个人项目,请在未经DBA批准的情况下制作索引,在部署之前研究索引。它们不是免费的,它们会影响您的环境,并且需要进行维护。
要创建特定的建议查询,请启用SSMS中的包含实际执行计划,运行该查询,切换到执行计划选项卡,建议的缺失索引应为绿色文本,右键单击,编写脚本到新窗口,给它一个唯一的名称,然后执行查询。
如果您提供的消息是您要制作的索引,请删除第一部分并重命名:
CREATE NONCLUSTERED INDEX [ix_your_unique_name_here]
ON dbo.ScanHistory (PartNo, ScanDate)