как применить следующее с меньшим временем - PullRequest
0 голосов
/ 26 марта 2019

Здравствуйте, есть способ применить это с меньшими затратами времени: запрос занимает слишком много времени, его 15 минут сейчас и все еще выполняется

УДАЛИТЬ ИЗ [1] ГДЕ ТЕЛЕФОН В (

ВЫБЕРИТЕ ТЕЛЕФОН ИЗ [2] ГДЕ call_date МЕЖДУ «2019-03-04» И «2019-03-22» UNION
ВЫБЕРИТЕ ТЕЛЕФОН ИЗ [3]

) GO

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Я бы порекомендовал:

DELETE one FROM [1] one
WHERE EXISTS (SELECT 1
              FROM [3] three
              WHERE three.phone = one.phone
             ) OR
      EXISTS (SELECT 1
              FROM [2] two
              WHERE one.phone = two.phone AND
                    two.call_date BETWEEN '2019-03-04' AND '2019-03-22'
             );

А затем рекомендуется индексировать [2](phone, call_date) и [3](phone).

1 голос
/ 26 марта 2019

Я бы попробовал с EXISTS с OR вместо UNION:

DELETE o 
FROM [1] o
WHERE EXISTS (SELECT 1
              FROM [2] t
              WHERE o.phone = t.phone AND
                    t.call_date >= '2019-03-04' AND t.call_date <= '2019-03-22'
             ) OR
      EXISTS (SELECT 1 FROM [3] tr WHERE tr.phone = o.phone);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...