Время выполнения SQL - PullRequest
0 голосов
/ 19 мая 2018

Здесь я сталкиваюсь с проблемой времени выполнения, очень расстроен

UPDATE [OT] 
SET AAA = 8 
WHERE ID in 
(
select UID from [IP] B 
inner join [OT] A 
on B.ADDR = A.ADDR and A.ID=B.ID
)  
AND AAA= 6  ;

У таблицы OT есть повторяющийся идентификатор, count(*) около 900000 строк У таблицы IP есть уникальный идентификатор, count(*) около 800000 строк

AAA является столбцом типа таблицы OT: tinyint select count(*) from OT where AAA=6 около 150000

Я не знаю, почему этот запрос займет более 1 часа ??Мой другой аналогичный запрос занимает всего 10 секунд

1 Ответ

0 голосов
/ 19 мая 2018

Я бы просто написал это проще:

UPDATE OT
    SET AAA = 8 
    FROM OT
    WHERE EXISTS (SELECT 1 FROM IP WHERE IP.ADDR = OT.ADDR AND IP.ID = OT.ID) AND
          OT.AAA = 6  ;

Для производительности вам нужны индексы на OT(AAA) и IP(ADDR, ID).

...