Как индексировать значения, которых нет в другой таблице - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно найти все идентификаторы, которые есть в одной таблице, но не в другой.

У меня есть простой выбор:

SELECT ID 
FROM  Table1 
WHERE ID NOT IN (SELECT id FROM Table2)

Но если я сделаю EXPLAIN QUERY PLANЯ получаю

"0"|"0"|"0"|"SCAN TABLE Table1"
"0"|"0"|"0"|"USING INDEX index_Table2_id FOR IN-OPERATOR"

Обе мои таблицы имеют id, определенную как id integer PRIMARY KEY, (для table1) и нормальный индекс для table2.

Любое предложение о том, как яможет ускорить этот запрос?

У меня ~ 200000 записей в table1 и ~ 2 миллиона записей в table2, выполнение запроса занимает около 500 мс.

Что может быть причинойзапрос выполняется так медленно, какие-либо предложения о том, как я могу ускорить его?

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете использовать LEFT JOIN вместе с предложением WHERE table2.ID IS NULL:

SELECT table1.ID
FROM table1 LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL;

Я считаю, что это быстрее.

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