Fetching RAND() rows without ORDER BY RAND() in just one query

后端 未结 3 1036
粉色の甜心
粉色の甜心 2020-12-10 00:26

Using RAND() in MySQL to get a single random row out of a huge table is very slow:

SELECT quote FROM quotes ORDER BY RAND() LIMIT 1

Here is

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-10 01:01

    Is there a reason why a stored procedure cannot be used to create a prepared statement?

    DELIMITER //
    DROP PROCEDURE IF EXISTS rand_quote//
    CREATE PROCEDURE rand_quote()
    BEGIN
        SET @rand := ROUND((SELECT COUNT(*) FROM quotes) * RAND());
        SET @sql := CONCAT('SELECT * FROM quotes LIMIT ', @rand, ', 1');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END;
    //
    DELIMITER ;
    

提交回复
热议问题