Возможно, вы захотите попробовать следующее.
Сначала создайте индекс в журналах, включая все соответствующие столбцы:
CREATE INDEX ix ON Logs
(
L_Parent_ID -- join condition, variable
)
INCLUDE
(
L_User -- no filter condition, but you use it your update
)
WHERE
(
L_Event = 'ADD' -- join condition, constant
)
Если это уникальный индекс, ie , только одна строка будет когда-либо существовать с событием ADD для данного родительского идентификатора, убедитесь, что этот индекс уникален, так как он может значительно повысить производительность.
Во-вторых, и это ситуация, когда вы попадете, вы можете Попробуйте с индексом Costs (CostBy), потому что вы ищете только пустые значения CostBy для обновления. Этот индекс нужно будет обновить по вашему запросу, потому что он обновляет его, поэтому он может замедлить ваш запрос, а не ускорить его. Это зависит от ряда факторов.
Если у вас есть корпоративная лицензия, попробуйте оба варианта с WITH (DATA_COMPRESSION = PAGE)
, это может значительно сократить время ввода-вывода за счет ЦП. Это зависит от вашего узкого места.
Кроме того, в зависимости от характера ваших данных, обновление статистики может улучшить ваши запросы. Если количество строк с CostBy = '' слишком велико по сравнению с другими значениями, вы можете воспользоваться полной статистикой по этому полю. Рассмотрим NORECOMPUTE
, если они вам нужны только для этого конкретного c запроса, на этот раз.
CREATE STATISTICS st_Costs_CostBy
ON Costs (CostBy)
WITH FULLSCAN, NORECOMPUTE;