请问我需要在我的桌子中随机选择JUST ONE ROW需要什么查询?
我试过了:
SELECT *
FROM `table`
ORDER BY RAND()
LIMIT 0,1;
它似乎非常缓慢,有时无效。
由于
答案 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改进:)