您好,并感谢提前看看这个。SQL Server - 在两个日期之间搜索的最佳方法
我发现了45个存储过程中的一个问题,其他人写道,她评论说,性能大幅下滑。我在5分钟内看了一眼,发现了问题,进行了一次测试,并从60秒下降到了4秒,其中有一次没有使用索引,并且桌面扫描发生在1000万个+记录。这是使用SQL Server 2005.
该表是一个审计日志,并由存储过程查询以在记录具有特定值时提取updt_tmstmp。我将下面的代码块更改为使用“NOT IN”与8“product_code <>'XX'”语句,将第一个datediff更改为使用索引列updt_tmstmp,并且还添加了AUDIT_LOG.updt_tmstmp> @dtStartDate实现的检查性能提高。我只是觉得这可以以不同的方式实现(更优雅)。我希望对改进有任何想法或想法。
WHERE
PRODUCT.product_code NOT IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D99') AND
AUDIT_LOG.updt_tmstmp >= @dtStartDate AND
--Compares that the date entered is between the two date parameters
(DATEDIFF(dd,GETDATE(),AUDIT_LOG.updt_tmstmp)
BETWEEN DATEDIFF(dd,GETDATE(),@dtStartDate)
AND DATEDIFF(dd,GETDATE(),@dtEndDate))
AND AUDIT_LOG.event_id = (SELECT MIN(AUDIT_LOG.event_id)
FROM L_EVENT_LOG
WHERE AUDIT_LOG.transaction_id = PRODUCT.transaction_id AND AUDIT_LOG.queue = 'AP')
是的,audit_log.updt_tmstmp看起来很奇怪,我同意。相关的子查询有一个新的编辑完成,我在我们的开发环境中使用索引,并没有改变表名。 –