如何使这个mysql查询更快?命令是凶手吗?限制?

gopyfrb3  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(525)
SELECT *  FROM table WHERE city LIKE example ORDER by RAND() Limit 10

我正试图返回,obv,一些随机条目从一个表,但它是在相当多的网页,得到点击,所以它可以导致网站的速度减慢。我把查询注解掉了,一切又好了,所以我知道是这样,但我想借此机会学习一下如何更好地执行查询。
我认为索引可能会有所帮助,但在这种情况下,没有连接的情况似乎没有帮助。谢谢。

3phpmpom

3phpmpom1#

您可以通过在 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行左右。那种应该很快。

相关问题