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

สุ่มข้อมูลต่างกันทุกครั้งด้วย RAND() + ORDER BY + LIMIT

สุ่มแถวไม่ซ้ำทุกครั้งที่รัน

รวม ORDER BY RAND() กับ LIMIT

ข้อมูล Employee (8 แถว)

+----+--------+--------+
| ID | Name   | Salary |
+----+--------+--------+
| 1  | Gaurav | 50000  |
| 2  | Rahul  | 20000  |
| 3  | Advik  | 25000  |
| 4  | Aarav  | 65000  |
| 5  | Ram    | 20000  |
| 6  | Mohan  | 30000  |
| 7  | Aryan  | NULL   |
| 8  | Vinay  | NULL   |
+----+--------+--------+

คำสั่งสุ่ม 4 แถว

SELECT * FROM employee ORDER BY RAND() LIMIT 4;

ผลลัพธ์ 3 ครั้งติดต่อกัน (ต่างกันทุกครั้ง)

-- ครั้งที่ 1
+----+-------+--------+
| 5  | Ram   | 20000  |
| 4  | Aarav | 65000  |
| 6  | Mohan | 30000  |
| 8  | Vinay | NULL   |
+----+-------+--------+

-- ครั้งที่ 2
+----+--------+--------+
| 6  | Mohan  | 30000  |
| 8  | Vinay  | NULL   |
| 2  | Rahul  | 20000  |
| 1  | Gaurav | 50000  |
+----+--------+--------+

-- ครั้งที่ 3
+----+-------+--------+
| 3  | Advik | 25000  |
| 8  | Vinay | NULL   |
| 7  | Aryan | NULL   |
| 5  | Ram   | 20000  |
+----+-------+--------+

ประโยชน์

  • สุ่มตัวอย่างข้อมูล (Sampling)
  • Featured items / Random quotes
  • A/B Testing

ประสิทธิภาพ

  • ช้ากับตารางใหญ่ (Full table scan + Filesort)
  • ตาราง > 10K rows ควรใช้วิธีอื่น (WHERE RAND() < 0.01, etc.)