Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chọn bản ghi ngẫu nhiên trong MySQL với RAND()

Cú pháp cơ bản

SELECT * FROM bang ORDER BY RAND() LIMIT 1;

Ví dụ: Chọn 1 sinh viên ngẫu nhiên

Dữ liệu

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Bob         |
| 4         | Sam         |
| 5         | Mike        |
| 6         | Robert      |
+-----------+-------------+

Lần 1

mysql> SELECT * FROM selectRandomRecord ORDER BY RAND() LIMIT 1;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 3         | Bob         |
+-----------+-------------+

Lần 2

mysql> SELECT * FROM selectRandomRecord ORDER BY RAND() LIMIT 1;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 5         | Mike        |
+-----------+-------------+

Hiệu năng với bảng lớn

ORDER BY RAND() quét toàn bảng → chậm khi bảng > 10k dòng.

Cách tối ưu cho bảng lớn

-- Lấy ID ngẫu nhiên trong phạm vi
SELECT * FROM bang 
WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM bang)))
ORDER BY id LIMIT 1;

Hoặc dùng 2 truy vấn:

-- 1. Lấy count
SELECT COUNT(*) INTO @cnt FROM bang;
-- 2. Offset ngẫu nhiên
SET @offset = FLOOR(RAND() * @cnt);
PREPARE stmt FROM 'SELECT * FROM bang LIMIT ?, 1';
EXECUTE stmt USING @offset;

Chọn N bản ghi ngẫu nhiên

SELECT * FROM bang ORDER BY RAND() LIMIT 10;

Lưu ý: RAND() không deterministic. Dùng RAND(seed) để có kết quả lặp lại được (test/debug).