how to select random unique records on each execution of the SQL Query

前端 未结 2 1045
孤城傲影
孤城傲影 2020-12-21 16:25

I have a table \"masterurls\" it has morethan 1 million records. I want to fetch random records each time the query executed. It should not have any of the records that were

2条回答
  •  盖世英雄少女心
    2020-12-21 16:36

    Since you can pass a seed parameter to the RAND() function, you can "paginate" the random results by generating a seed before the first page.

    Sample code: For the first page (varies by language):

    int seed = Math.abs(new Random().nextInt());
    

    SQL query:

    SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200;
    

    Store the seed somewhere (for web-based applications you can use a url parameter or session). For the next pages:

    SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;
    

    Note: Sorting by RAND() is a heavy operation, you might be better off storing a indexed column with the Hash Code of the url, then using a module-based or other random functions.

提交回复
热议问题