我有一个有80万行的表,我需要选择其他2个表(已购买的票)中没有的20个随机行。
我已经尝试过使用NOT IN语法的SQL,但是它仍然(在开发机中有时为1s)。
实际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 rand行非常慢。该功能是在网站的所有页面上执行的,我正在考虑如何优化和缓存该查询。
谢谢大家的支持