我需要帮助优化以下查询(返回~8k行):
SELECT A.sys_id, 'AppSvrRels' = CAST(SUBSTRING((SELECT (', ' + T.name)
FROM (
SELECT A.sys_id, AppSvr.name
FROM GTS_DataStage.SN.cmdb_ci_appl A
LEFT JOIN GTS_DataStage.SN.cmdb_rel_ci X
ON A.sys_id = X.parent
LEFT JOIN GTS_DataStage.SN.cmdb_ci AppSvr
ON X.child = AppSvr.sys_id
AND AppSvr.dv_sys_class_name
IN ('UNIX Server', 'Windows Server',
'IBM Mainframe', 'Application Server')
WHERE A.dv_sys_class_name = 'Application'
AND A.dv_u_used_for = 'Production'
AND A.dv_operational_status = 'Deployed') T
WHERE A.sys_id = T.sys_id
FOR XML PATH('')), 3, 4000) AS NVARCHAR(4000))
FROM GTS_DataStage.SN.cmdb_ci_appl A
WHERE A.dv_sys_class_name = 'Application' AND A.dv_u_used_for = 'Production'
AND A.dv_operational_status = 'Deployed'这些表位于DataStage上,我不允许使用索引。总行数为: cmdb_ci_appl:~20k;cmdb_rel_ci:~1200 k;cmdb_ci:~800 K
下面的图像显示了执行计划的一个部分(如果需要,我可以上传sqlplan文件,但是没有什么可看的):

任何帮助都是非常感谢的。
发布于 2013-07-27 22:46:48
在查询计划中显示那些渴望索引假脱机的DBA。SQL Server非常渴望在这里支持索引,因此它在每次执行时都会创建自己的临时索引!
在sqlplan文件中总是有更多的内容,所以请上传它。如果您想要的不仅仅是一般的建议,问题中的统计-只有表格的副本 (或者至少是表和索引定义)也是有用的。
这个答案最初是对你的问题的评论。如果提供了查询计划或DDL,我将更新它。
https://dba.stackexchange.com/questions/27175
复制相似问题