Предполагается, что listings
проиндексирован по идентификатору:
Если ваш идентификатор является целым числом:
SELECT listings.id, listings.price, listings.seller_id, sellers.blacklisted
FROM listings
INNER JOIN sellers ON sellers.id = listings.sellers_id
WHERE listings.price > 100
AND sellers.blacklisted = 0
AND listings.ID LIKE CONCAT(CEIL(RAND() * 100),'%')
LIMIT 4
и если это ascii
SELECT listings.id, listings.price, listings.seller_id, sellers.blacklisted
FROM listings
INNER JOIN sellers ON sellers.id = listings.sellers_id
WHERE listings.price > 100
AND sellers.blacklisted = 0
AND listings.ID LIKE CONCAT(CHAR(CEIL(RAND() * 100)),'%')
LIMIT 4
в основном мойСовет, чтобы ускорить процесс - сбросить заказ.Для всего, что связано с несколькими записями, вы добавляете измеримые накладные расходы.
ps, пожалуйста, прости меня, если concat не может быть использован таким образом в mqsql;не совсем уверен, сработает ли это.