У меня есть таблица с 800k строк, и мне нужно выбрать 20 случайных строк, которых нет в других 2 таблицах (билеты уже куплены).
Я уже пробовал SQL с синтаксисом NOT IN, но он все еще(иногда 1 с в машине разработки).
Фактический SQL:
SELECT id, description FROM ticket
WHERE
id NOT IN (SELECT id FROM cart_item WHERE DATE(added) = CURDATE()) AND
id NOT IN (SELECT id FROM valid_ticket) AND
id BETWEEN 1 AND 200000
ORDER BY RAND() LIMIT 20
Мне нужно немного быстрее.Потому что захват всей таблицы и выбор 20 рандовых строк происходит очень медленно.Эта функция выполняется на всех страницах веб-сайта, и я думаю, как оптимизировать и кэшировать этот запрос.
Спасибо всем за поддержку