Учитывая следующую структуру таблицы
images data
------------------ ----------------------------------
| id | filename | | fromImageId | toImageId | result |
------------------ ----------------------------------
У меня есть следующее SELECT
, чтобы получить все images.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
с images.id