Производительность запроса отличается только изменением даты в предложении 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
, Создайте его, и вы увидите разницу.
,