如何在MySQL中随机选择一行?

时间:2013-04-10 07:34:03

标签: mysql

请问我需要在我的桌子中随机选择JUST ONE ROW需要什么查询?

我试过了:

SELECT * 
FROM `table` 
ORDER BY RAND() 
LIMIT 0,1;

它似乎非常缓慢,有时无效。

由于

2 个答案:

答案 0 :(得分:1)

如果表格很大,ORDER BY会很慢。相反,您可以根据表格中的行数选择随机偏移量。

SELECT * FROM table LIMIT 1 OFFSET ?

其中?是一些随机数< SELECT COUNT(*) FROM table

答案 1 :(得分:1)

您可以创建一个包含动态SQL的STORED PROCEDURE来获取随机记录,

DELIMITER $$
CREATE PROCEDURE SelectOne()
BEGIN
    SET @rownum := (SELECT count(*) FROM TableName);
    SET @start := (SELECT FLOOR((rand() * @rownum)));
    SET @sql = CONCAT('SELECT * FROM TableName LIMIT ?, 1');

    PREPARE stmt FROM @sql;
    EXECUTE stmt USING @start;
    DEALLOCATE PREPARE stmt;        
END $$
DELIMITER ;

感谢Jack改进:)