【发布时间】:2018-08-22 05:26:16
【问题描述】:
我有一个查询通常需要五六分钟才能运行。它有一个WHERE 和ORDER BY 子句,但没有JOINs。但是,如果我将查询简化为:
SELECT * FROM ReportIndex
运行仍然需要五六分钟。
该表有超过 1100 万行。
由于没有连接,我看不出索引如何使它更快。谁能建议我可以尝试加快此查询的其他任何内容?
更新:
这是我正在使用的实际查询。它返回 6,668,324 行。
SELECT '1' AS vrsID,
lprKey,
lprRptName,
lprTitle,
lprDate,
lprOwner,
lprUserID,
lprArchiveDate,
lprTrackDate,
lprActionView,
lprActionEmail,
lprActionExcel,
lprActionForward,
lprActionReassign,
lprActionDownload,
lprActionLocalPrint,
lprActionServerPrint,
lprPageCount,
lprBytes,
lprDataType,
lprArchived,
lprJobName,
lprViewed,
lprRptID
FROM ReportIndex
WHERE (lprOwner IN ('admin', 'APAdmin', 'APClerk', 'AP-Tab-700', 'AP-Tab-A-B', 'AP-Tab-A-K_EMP', 'AP-Tab-AP520', 'AP-Tab-CAN', 'AP-Tab-C-E', 'AP-Tab-COMM', 'AP-Tab-Confidential', 'AP-Tab-EE-Waiting', 'AP-Tab-F-O', 'AP-Tab-Historical', 'AP-Tab-LCD', 'AP-Tab-LCD_EMP', 'AP-Tab-LEA', 'AP-Tab-LPP', 'AP-Tab-LPS', 'AP-Tab-LPS_EMP', 'AP-Tab-LSI', 'AP-Tab-LTI', 'AP-Tab-L-Z_EMP', 'AP-Tab-P-R', 'AP-Tab-S-Z', 'AP-Tab-Unknown', 'Group-Category-VendorDocuments', 'Group-Quality-Control', 'Group-VendorDocs', 'HRAdmin', 'HR-Category-Payroll', 'HR-Category-Performance', 'HR-Category-Personnel', 'HR-Category-Upload', 'HR-Document-Delete', 'HR-Document-Index', 'HR-Group-DocumentMaintenance', 'HR-IndexQueue-Email', 'HRROLE01', 'HRROLE02', 'HRROLE03', 'HRROLE04', 'HRROLE05', 'HRROLE06', 'HRROLE09', 'HRROLE10', 'HRROLE11', 'HRROLE12', 'HRROLE13', 'HRROLE14', 'HRROLE15', 'HRROLE16', 'HRROLE17', 'HRROLE18', 'HRROLE19', 'HRROLE21', 'HRROLE23', 'HRROLE24', 'HRROLE25', 'HRROLE26', 'HRROLE28', 'HRROLE29', 'HRROLE30', 'HRROLE31', 'HRROLE34', 'HRROLE35', 'HRROLE36', 'HRROLE37', 'HRROLE39', 'HRROLE41', 'HRROLE42', 'HRROLE43', 'HRROLE44', 'HRROLE45', 'HRROLE46', 'HRROLE47', 'HRROLE48', 'HRROLE49', 'HRROLE50', 'HRROLE51', 'HRROLE52', 'HRROLE53', 'HRROLE54', 'HRROLE55', 'HRROLE56', 'HRROLE57', 'HRROLE58', 'HRROLE59', 'HRROLE60', 'HRROLE61', 'HRROLE62', 'HRROLE63', 'WFAdmin', 'AccountsPayable')
AND lprArchived = 0 AND lprPendingDelete = 0) AND lprDone=0
ORDER BY lprDate DESC
更新 2:
【问题讨论】:
-
你真的需要
SELECT所有的列和所有的行吗?使用WHERE子句 - 结果返回多少行?可能可以创建索引来优化搜索,但首先要告诉您是否需要所有列。 -
'执行计划太大' -
ReportIndex是表还是视图? -
plain select的执行计划怎么能大?那就上传到这里看看吧:brentozar.com/pastetheplan
-
"here" - 我的意思是评论末尾的“brentozar”网址。并在此处(在问题中)分享它的链接。 @JonathanWood
-
@JonathanWood Gordon 回答的倒数第二段。与 MJH 的建议相同。除非您的查询变得更有选择性,否则您无能为力。
标签: sql sql-server sqlperformance