【发布时间】:2015-10-19 19:37:01
【问题描述】:
我正在尝试优化这个非常古老且缓慢的查询,但我不确定我是否可以对它做任何事情,但在 WHERE、JOIN 和 ORDER BY 所涉及的列上添加更多索引。
查询:
SELECT TOP 400 jobticket.jobnumber, jobticket.typeform, jobticket.filename, jobticket.req_number, jobticket.reqd_del_date, jobticket.point_of_contact, jobticket.status, jobticket.DapsDate, jobticket.elpod, job_info.IDOrderMaskedStatus, job_info.job_status, job_info.SalesID, job_info.location, job_info.TOMetadataID
FROM jobticket WITH (NOLOCK)
INNER JOIN job_info WITH (NOLOCK) ON job_info.jobnumber = jobticket.jobnumber
WHERE
(
NOT(
(jobticket.status = 'Complete' OR jobticket.status = 'Completed')
and (job_info.job_status = 'Actualized' OR job_info.job_status = ''
OR job_info.job_status = 'Actualized Credit Billed'
OR job_info.job_status = 'DWAS Actualized' OR job_info.job_status = 'DWAS Actualized Credit Billed'
)
)
or
((SELECT COUNT(job_status) AS Expr1 FROM tblConsolidatedBilling AS tblConsolidatedBilling_1 WITH (NOLOCK)
WHERE (job_status <> 'Actualized'
AND job_status <> 'Actualized Credit Billed')
AND (master_jobnumber = jobticket.jobnumber)) > 0)
)
and (jobticket.status != 'Waiting Approval' or (jobticket.status = 'Waiting Approval' and jobticket.DPGType is null))
and jobticket.typeform <> 'todpg'
and ((job_info.isHidden <> 1 or job_info.isHidden is null) and job_info.isInConcurrentRelease is null)
and job_info.deleted != '1'
and jobticket.status != 'New Job'
and jobticket.status != 'PRFYCLSFD'
ORDER BY
job_info.expediencyLevel DESC,
jobticket.jobnumber DESC
老实说,我不知道如何处理这个查询。
是否应该在 WHERE JOIN 和 ORDER BY 中涉及的所有列上添加单独的非聚集索引?
这些表上有很多索引,但我不确定它们对这个查询是否有帮助:
【问题讨论】:
-
您是否以某种方式根据数据库优化顾问结果自动创建索引?或者你怎么会有这么多重复的索引...
-
我不知道。我正在努力收拾烂摊子:)
标签: sql-server query-optimization sql-execution-plan