使用此查询快速获取随机行有什么缺点

时间:2014-10-28 22:09:03

标签: mysql sql

我一直在寻找一种方法来获取带有where子句的随机行。我在stackoverflow上看过很多帖子,它们都有一些缺点,或者太复杂和丑陋。

但是我发现了这个查询,它看起来非常简单和聪明

你能看到它缩放的任何重大缺陷吗?

INSERT INTO table (column1, column2, rand_col) VALUES(1,2,RAND());

然后选择随机行变得非常简单:

SELECT * FROM table WHERE rand_col>RAND() LIMIT 1

此算法允许删除记录,而无需重新计算键列的额外步骤。

关于格式化的猜测。我正在使用手机

3 个答案:

答案 0 :(得分:1)

我看到以下缺点:

  1. 如果没有排序,它将默认为插入顺序,因此提前插入的记录返回的可能性更高。即它不是很随机。
  2. 如果没有结果,必须重复执行查询。

答案 1 :(得分:0)

缺点是列出的几个,一个很好的解决方案是:

找到表格中的行数,在那里选择一个随机数并选择该行。

     $row = SELECT table_rows*rand() FROM INFORMATION_SCHEMA.TABLES WHERE table_name='foo'
     SELECT * FROM foo LIMIT $row,1

答案 2 :(得分:0)

您不需要额外的列。维护它只是浪费空间和代码。只需使用

SELECT * FROM table ORDER BY rand() LIMIT 1