Здравствуйте и спасибо заранее за то, что взглянули на это.
Я обнаружил проблему в 45 хранимых процедурах, которые кто-то написал, она отметила, что производительность значительно снизилась. Я посмотрел и обнаружил проблему примерно через 5 минут, запустил тест и перешел с 60 секунд до 4 секунд для одного из 45. Индекс не использовался, и сканирование таблицы происходило на столе с 10 миллионами +. записей. Это использует 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')