2016-01-20 1 views
1

Мне нужно выбрать все записи из таблицы, содержащей идентификаторы, которые не «проверены» в четырех других таблицах. Вот мой запрос, который работает:Ошибка MySQL при выборе записей с идентификатором, отсутствующим в 4 других таблицах

select id, idDate, idInfo, idChecked from aTable 
where id not in (select id from aSimilarTable1 where idChecked is not null) 
and id not in (select id from aSimilarTable2 where idChecked is not null) 
and id not in (select id from aSimilarTable3 where idChecked is not null) 
and id not in (select id from aSimilarTable4 where idChecked is not null) 

таблицы растут со временем, и теперь этот запрос занимает очень много времени для запуска (несколько минут, в лучшем случае). Размер таблиц являются следующие:

ATable - 1000 записей

aSimilarTable1, 2, 3, 4 - 50000 записей

Я буду работать на уменьшение размера таблиц. Однако существует ли более эффективный способ сделать вышеуказанный запрос?

--CLARIFICATION--

Не все идентификаторы из ATable может присутствовать в aSimilarTable1,2,3 или 4. Ищу идентификаторы в ATable, которые либо не присутствует в любом aSimilarTable, или если они присутствуют, не «проверены».

--UPDATE--

Объяснить план запроса:

id select_type   table   type possible_keys key key_len  ref rows Extra 
1 PRIMARY    aTable    ALL null  null null  null 796  Using where 
5 DEPENDENT SUBQUERY aSimilarTable4  ALL null  null null  null 21217 Using where 
4 DEPENDENT SUBQUERY aSimilarTable3  ALL null  null null  null 59077 Using where 
3 DEPENDENT SUBQUERY aSimilarTable2  ALL null  null null  null 22936 Using where 
2 DEPENDENT SUBQUERY aSimilarTable1  ALL null  null null  null 49734 Using where 
+0

Каковы структуры таблиц? Индексы? Мощность? Где наш план eplain? – symcbean

+0

@symcbean спасибо за комментарий - приложил план объяснения, поймите, какая мощность концептуально, но как я его количественно оцениваю? – MNM

ответ

1

Использование LEFT JOIN «s.

SELECT a.id, a.idDate, a.idInfo, a.idChecked 
FROM aTable a 
LEFT JOIN aSimilarTable1 b ON a.id = b.id 
LEFT JOIN aSimilarTable2 c ON a.id = c.id 
LEFT JOIN aSimilarTable3 d ON a.id = d.id 
LEFT JOIN aSimilarTable4 e ON a.id = e.id 
+0

спасибо за ответ, PLS см. РАЗРЕШЕНИЕ в вопросе – MNM

+0

'WHERE (b.id NULL ИЛИ NOT b.checked) AND (c.id ...' –