SELECT * FROM table WHERE city LIKE example ORDER by RAND() Limit 10
我试图从表中返回一些随机条目,但它会在很多页面上被点击,因此会导致网站速度变慢。我评论了这个查询,一切都很好,所以我知道这一点,但我想借此机会了解一下如何更好地进行查询。
我认为索引可能有所帮助,但在这种情况下没有任何联接似乎无益。感谢。
答案 0 :(得分:1)
您可以通过在table(city)
上添加索引来加快速度。
我认为使用=
而非like
:
SELECT t.*
FROM table t
WHERE t.city = example
ORDER by RAND()
Limit 10;
根据返回的行数,可能会进一步优化。
例如,一种方法是:
SELECT t.*
FROM (SELECT t.*, RAND() as rnd, (@rn := @rn + 1) as rn
FROM table t CROSS JOIN
(SELECT @rn := 0) params
WHERE t.city = example
) t
WHERE rnd < (100 / @rn) -- get a sample of about 100 records
ORDER BY rnd
LIMIT 10;
这使用变量和WHERE
在排序之前将行限制为大约100。那种应该很快。