Производительность запроса отличается только изменением даты в предложении where

У меня есть этот SQL

SELECT 
    ABS(a.cantidad - ISNULL(b.cantidad, 0)) as cantidad, 
    a.codarticulo, a.codalmacen, a.codarticulotallaje 
FROM 
    (SELECT 
         ABS(ISNULL(SUM(cantidad), 0)) AS cantidad, 
         movimientos.codarticulo, codalmacen, 
         movimientos.codarticulotallaje 
     FROM movimientos 
     WHERE 
         (fecha > '12/02/2015') AND (fecha < '12/05/2015 10:29:30') 
         AND (altabaja = 2) AND 
         ((tipodocumento = 3) OR (tipodocumento = 4)) AND (codalmacen = '3') 
     GROUP BY 
         movimientos.codarticulo, movimientos.codalmacen, 
         movimientos.codarticulotallaje) as a 
LEFT OUTER JOIN 
   (SELECT 
        ABS(ISNULL(SUM(cantidad),0)) as cantidad, 
        movimientos.codarticulo, codalmacen, codarticulotallaje 
    FROM movimientos 
    WHERE (fecha > '12/02/2015') AND (fecha < '12/05/2015 10:29:30') 
      AND (codalmacen = '3') AND (altabaja = 1) 
      AND ((tipodocumento = 5) OR (tipodocumento = 6)) 
      AND (cantidad > 0) 
   GROUP BY 
       movimientos.codarticulo, 
       codalmacen, codarticulotallaje ) as b 
       on a.codarticulo = b.codarticulo AND 
          a.codarticulotallaje = b.codarticulotallaje 

Дата и время dd/MM/yyyy Формат таблицы movimientos имеет около 450000 строк.

Если моя дата меньше 12/02/2015 в обоих WHERE (fecha > 12/02/2015) запросы. Или более 05.05.2015 запрос занимает от 200 мс до 2 секунд, чтобы ответить, что нормально.

Однако, если дата похожа на приведенную в примере, ответ занимает не более минуты.

Я лично не знаю, в чем причина.

1 ответ

Решение

Как правило, такое различие означает, что SQL Server выбирает другой план выполнения для каждого набора критериев. И (опять же, как правило) это означает, что у него нет хорошего индекса для начала (или вообще нет индексов). Начните с изучения планов выполнения, ищите таблицы сканирования. Это плохо. И самый очевидный выбор: кажется, нет индекса для столбца fetcha, Создайте его, и вы увидите разницу.

,

Другие вопросы по тегам