SQL Server - 在两个日期之间进行搜索的最佳方法

时间:2011-11-02 14:09:41

标签: sql-server-2005

您好,并提前感谢您看一下。

我发现了其他人写的45个存储过程中的问题,她评论说性能大幅下滑。我看了一下,在大约5分钟内发现了问题,进行了测试,从45秒到45秒,其中一个是45秒。没有使用索引,在1000万+的桌子上进行了表扫描记录。这是使用SQL Server 2005.

该表是审计日志,存储过程会查询该记录,以便在记录具有特定值时提取updt_tmstmp。我更改了下面的代码块以使用“NOT IN”vs 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')

2 个答案:

答案 0 :(得分:1)

我会用GETDATE()调用三次。不确定是否会对其进行优化,但值得将其放入变量中以开始查看是否有帮助。

答案 1 :(得分:1)

audit_log.updt_tmstmp的比较看起来有点奇怪。

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)) 

我想这会做同样的事情。

audit_log.updt_tmstmp >= @dtStartDate and 
audit_log.updt_tmstmp < @dtEndDate

我不知道如何处理相关的子查询。它使用where子句中外部查询的字段,不使用l_event_log中的任何字段。您应该将where子句移动到主查询中。

也许就是这样。

where  product.product_code not in ( 'D01', 'D02', 'D03', 'D04',
                                     'D05', 'D06', 'D07', 'D99' ) and 
       audit_log.updt_tmstmp >= @dtStartDate and 
       audit_log.updt_tmstmp < @dtEndDate and
       audit_log.transaction_id = product.transaction_id and 
       audit_log.queue = 'AP' and
       l_event_log.event_id = (select min(audit_log.event_id)
                               from l_event_log)      
相关问题