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

Chọn ngẫu nhiên một hàng trong MySQL

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ê.