Есть ли способ ускорить этот запрос? - PullRequest
1 голос
/ 17 января 2012

У меня есть две таблицы, одна из которых является копией другой. (Я должен удалить записи, которые больше не существуют в родительском). Выполнение этого запроса работает, но для его завершения требуется около 1 минуты. Я знаю, что NOT EXISTS быстрее, потому что я не буду выполнять подзапрос для каждой строки, но не возвращает никаких результатов.

SELECT mlscopy.listing_listnum 
FROM mlscopy 
WHERE mlscopy.listing_listnum 
NOT IN (SELECT mls_cvrmls.listing_listnum FROM mls_cvrmls)

Я уточню, проблема здесь в том, что родитель меняется с течением времени, и я должен удалить / добавить записи от ребенка. Так что я застрял на удалении из дочернего элемента, где list_listnum не существует в родительском.

Вот запрос не существует

SELECT mlscopy.listing_listnum 
FROM mlscopy 
WHERE 
NOT EXISTS (SELECT mls_cvrmls.listing_listnum FROM mls_cvrmls)

понял это

SELECT mlscopy.listing_listnum
FROM mlscopy 
WHERE NOT EXISTS (
SELECT mls_cvrmls.listing_listnum 
FROM mls_cvrmls
WHERE mlscopy.listing_listnum = mls_cvrmls.listing_listnum
)

Ответы [ 3 ]

2 голосов
/ 17 января 2012

Попробуйте этот вариант и посмотрите, будет ли он лучше:

SELECT mlscopy.listing_listnum 
    FROM mlscopy 
        LEFT JOIN mls_cvrmls
            ON mlscopy.listing_listnum = mls_cvrmls.listing_listnum
    WHERE mls_cvrmls.listing_listnum IS NULL
0 голосов
/ 17 января 2012
SELECT mlscopy.listing_listnum 
FROM mlscopy A
NOT EXISTS
(
    SELECT *
    FROM mls_cvrmls B
    WHERE B.listing_listnum = A.listing_listnum
);
0 голосов
/ 17 января 2012

Попробуйте это:

CREATE INDEX i_listnum ON mls_cvrmls(listing_listnum ASC)

Попытка переписать запрос с помощью LEFT JOIN или NOT EXISTS, вероятно, не будет иметь большого значения, потому что оптимизатор запросов может выяснить это.

Однако возможность быстрого поиска строки в mls_cvrmls на listing_listnum может только улучшить производительность (но это займет дополнительное место).

О создании индекса .

Другой вариант может быть:

SELECT listing_listnum FROM mlscopy
 MINUS
SELECT listing_listnum FROM mls_cvrmls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...