ใช้ ORDER BY RAND() LIMIT N เพื่อสุ่มข้อมูลจำนวน N แถว
ไวยากรณ์
SELECT * FROM yourTableName ORDER BY RAND() LIMIT numberOfRecords;
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูล 5 แถว
mysql> create table DemoTable (LastName varchar(100));
mysql> insert into DemoTable values('Brown'), ('Smith'), ('Taylor'), ('Miller'), ('Johnson');
2. สุ่ม 4 แถว
mysql> select * from DemoTable order by rand() limit 4;
ผลลัพธ์ตัวอย่าง (สุ่มทุกครั้ง)
+----------+ | LastName | +----------+ | Brown | | Miller | | Johnson | | Taylor | +----------+
ข้อควรระวังด้านประสิทธิภาพ
ORDER BY RAND()ต้องสแกนทั้งตารางและจัดเรียง → ช้ามากเมื่อข้อมูลเยอะ (>10K rows)- ไม่สามารถใช้ Index ได้
วิธีที่เร็วกว่าสำหรับตารางใหญ่
วิธี 1: ใช้ ID สุ่ม (ต้องมี Auto Increment ไม่มีช่องว่างมาก)
SELECT * FROM DemoTable WHERE Id >= (SELECT FLOOR(RAND() * (SELECT MAX(Id) FROM DemoTable))) ORDER BY Id LIMIT 4;
วิธี 2: 2 ขั้นตอน (Application Level)
-- 1. หา COUNT(*) -- 2. สุ่ม OFFSET ใน Application -- 3. SELECT * FROM DemoTable LIMIT 4 OFFSET random_offset;
วิธี 3: TABLESAMPLE (MySQL 8.0.31+ / MariaDB)
SELECT * FROM DemoTable TABLESAMPLE SYSTEM (10); -- 10% ของข้อมูล