Dùng ORDER BY RAND() LIMIT 1 để lấy 1 hàng ngẫu nhiên.
Cú pháp
SELECT * FROM ten_bang ORDER BY RAND() LIMIT 1;
Ví dụ minh họa
Tạo bảng generateRandomRow:
CREATE TABLE generateRandomRow (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20), Age INT, PRIMARY KEY (Id)
);
INSERT INTO generateRandomRow (Name, Age) VALUES
('John',23), ('Larry',21), ('David',21), ('Carol',24), ('Bob',27), ('Mike',29), ('Sam',26);
Truy vấn ngẫu nhiên
SELECT * FROM generateRandomRow ORDER BY RAND() LIMIT 1;
Kết quả lần 1:
+----+------+------+
| Id | Name | Age |
+----+------+------+
| 5 | Bob | 27 |
+----+------+------+
Kết quả lần 2 (chạy lại):
+----+------+------+
| Id | Name | Age |
+----+------+------+
| 6 | Mike | 29 |
+----+------+------+
⚠️ Hiệu năng: ORDER BY RAND() quét toàn bảng, tạo bảng tạm, sắp xếp – **rất chậm với bảng lớn** (>10k hàng).
Giải pháp tối ưu cho bảng lớn
-- Lấy ID ngẫu nhiên trong phạm vi MAX(Id)
SET @rand_id = FLOOR(RAND() * (SELECT MAX(Id) FROM ten_bang)) + 1;
SELECT * FROM ten_bang WHERE Id >= @rand_id LIMIT 1;
Hoặc dùng TABLESAMPLE (MySQL 8.0.13+) cho lấy mẫu thống kê.