Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL select 10 random rows from 600K rows fast

Tags:

sql

random

mysql

How can I best write a query that selects 10 rows randomly from a total of 600k?

like image 827
Francisc Avatar asked Dec 01 '10 21:12

Francisc


People also ask

How do I get random rows in MySQL?

SELECT * FROM table_name ORDER BY RAND() LIMIT n; Here is the SQL query to get 3 random records in MySQL. Please note, you may get a different result, since it is a random result after all.

How do I get 10 rows in MySQL?

The following is the syntax to get the last 10 records from the table. Here, we have used LIMIT clause. SELECT * FROM ( SELECT * FROM yourTableName ORDER BY id DESC LIMIT 10 )Var1 ORDER BY id ASC; Let us now implement the above query.

How can we get a random number between 1 and 100 in MySQL?

select FLOOR( RAND() * (maximumValue-minimumValue) + minimumValue) as anyVariableName; Let us check with some maximum and minimum value. The maximum value we are considering is 200 and minimum is 100. The random number will be between 100 and 200 including 100 and 200 itself.


1 Answers

A great post handling several cases, from simple, to gaps, to non-uniform with gaps.

http://jan.kneschke.de/projects/mysql/order-by-rand/

For most general case, here is how you do it:

SELECT name   FROM random AS r1 JOIN        (SELECT CEIL(RAND() *                      (SELECT MAX(id)                         FROM random)) AS id)         AS r2  WHERE r1.id >= r2.id  ORDER BY r1.id ASC  LIMIT 1 

This supposes that the distribution of ids is equal, and that there can be gaps in the id list. See the article for more advanced examples

like image 143
Riedsio Avatar answered Oct 20 '22 15:10

Riedsio