 <p>Assuming that <code>listings</code> is indexed on id:</p> <p>If your id is an integer:</p> <pre><code>SELECT listings.id, listings.price, listings.seller_id, sellers.blacklisted FROM listings INNER JOIN sellers ON sellers.id = listings.sellers_id WHERE listings.price &gt; 100 AND sellers.blacklisted = 0 AND listings.ID LIKE CONCAT(CEIL(RAND() * 100),'%') LIMIT 4 </code></pre> <p>and if it's ascii</p> <pre><code>SELECT listings.id, listings.price, listings.seller_id, sellers.blacklisted FROM listings INNER JOIN sellers ON sellers.id = listings.sellers_id WHERE listings.price &gt; 100 AND sellers.blacklisted = 0 AND listings.ID LIKE CONCAT(CHAR(CEIL(RAND() * 100)),'%') LIMIT 4 </code></pre> <p>basically my advice to speed things up is dump the order by. On anything over a few records you're adding measurable overhead.</p> <p>ps please forgive me if concat can't be used this way in mqsql; not entirely certain whether it'll work.</p>