从子查询中选择优化的随机结果

时间:2012-03-28 16:08:19

标签: mysql sql optimization random

我想使用“rand alt命令”查询(底部)来获取一组随机结果,但我想从结果中获取它们,例如:

SELECT t2.id FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id

我需要限制我得到的随机结果的数量。 我无法理解我需要使用的语法,任何帮助都非常感激。

感谢

“按rand alt排序”查询:

How can i optimize MySQL's ORDER BY RAND() function?

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 10
        FROM    t_random
        ) vars
STRAIGHT_JOIN
        (
        SELECT  r.*,
                @lim := @lim - 1
        FROM    t_random r
        WHERE   (@cnt := @cnt - 1)
                AND RAND(20090301) < @lim / @cnt
        ) i

2 个答案:

答案 0 :(得分:0)

SELECT 
      t2.id 
   FROM 
      index_table t1 
         JOIN data_table t2 
            ON t1.id= t2.index_id
   ORDER BY
     RAND()
   LIMIT 5

或通过限制所需的最大条目数

答案 1 :(得分:0)

这样的事情会起作用吗?

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 10
        FROM    FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id
        ) vars
STRAIGHT_JOIN
        (
        SELECT  t2.id,
                @lim := @lim - 1
        FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id
        WHERE   (@cnt := @cnt - 1)
                AND RAND() < @lim / @cnt
        ) i

我从RAND中删除了参数,否则我的输出始终是相同的。