2016-12-20 3 views
2

У меня есть где предложение вроде этого:Multiple ИЛИ условие ИНЕКЕ

WHERE 
T1.update_date >= @d 
    OR T2.update_date >= @d 
    OR T3.update_date >= @d 
    OR T4.update_date >= @d 
    OR T5.update_date >= @d 
    OR T6.update_date >= @d 
    OR T7.update_date >= @d 
    OR T8.update_date >= @d 
    OR T9.update_date >= @d 
    OR T10.update_date >= @d 
    OR T11.update_date >= @d 

Как оптимизировать это?

+2

Зачем вам нужно его оптимизировать? У SQL Server есть оптимизатор, который может сделать это за вас. – Dekel

+0

Почему, по вашему мнению, его нужно оптимизировать? –

+0

Любые индексы на этих столбцах? Кроме того, что говорит ваш план выполнения? –

ответ

0

Нам нужно будет увидеть полный запрос, чтобы дать вам полный ответ.

Однако, предполагая, что вы выполняете самосоединение с таблицей T 11 раз, вы можете упростить свой запрос и, возможно, повысить производительность, сначала применяя фильтр в CTE.

WITH T 
AS (
SELECT * 
FROM basetable 
WHERE Update_date >= @d 
) 
SELECT * 
FROM T AS t1 
INNER JOIN T AS t2 
    ON t1.Pk = t2.Pk 
INNER JOIN T AS t3 
    ON t1.Pk = t3.Pk; 

Если вы фильтруете в CTE, все последующие ссылки на CTE уже будут включать фильтр. В зависимости от остальной части вашего запроса это может повысить производительность, ограничив фильтр на один проход. Он также уплотняет код и упрощает его поддержку.

+0

Извините, я не могу разделить все запросы, также я думаю, что это бесполезно. way, Это не самостоятельное соединение – OussamaK

Смежные вопросы