如何让这个mysql查询更快?订单是杀手吗?极限?

时间:2018-04-23 21:55:59

标签: mysql

SELECT *  FROM table WHERE city LIKE example ORDER by RAND() Limit 10

我试图从表中返回一些随机条目,但它会在很多页面上被点击,因此会导致网站速度变慢。我评论了这个查询,一切都很好,所以我知道这一点,但我想借此机会了解一下如何更好地进行查询。

我认为索引可能有所帮助,但在这种情况下没有任何联接似乎无益。感谢。

1 个答案:

答案 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。那种应该很快。