Учитывая следующую структуру таблицы
images data
------------------ ----------------------------------
| id | filename | | fromImageId | toImageId | result |
------------------ ----------------------------------
У меня есть следующий SELECT
для получения всех изображений .filename
, которые не имеют записи в data
(либо fromImageId
, либо toImageId
)
SELECT image.id, image.filename
FROM images image
WHERE NOT EXISTS(
SELECT fromImageId, toImageId
FROM data results
WHERE fromImageId = image.id
OR toImageId = image.id
) ORDER BY image.id
Как таблица data
довольно большой (500 000+), этот запрос требует очень много времени для вычисления (около 10-15 секунд).
Я совершенно уверен, что здесь предстоит многое оптимизировать, но я не могу понять, что можно сделать для оптимизации запроса.
PS: images.id
— это PRIMARY KEY
, а fromImageId
и toImageId
— FOREIGN KEY
s on images.id