Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สุ่มเลือกจำนวนแถวคงที่จากตาราง MySQL

ใช้ 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% ของข้อมูล