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

การสุ่มข้อมูลใน MySQL ด้วย ORDER BY RAND() และค่าคั่นด้วยจุลภาค

การเตรียมข้อมูล

สร้างตารางเก็บค่าที่คั่นด้วยจุลภาค:

mysql> CREATE TABLE DemoTable1835 (
    ListOfIds VARCHAR(20)
);

เพิ่มข้อมูลตัวอย่าง:

mysql> INSERT INTO DemoTable1835 VALUES('10,20,30');
mysql> INSERT INTO DemoTable1835 VALUES('70,80,90');
mysql> INSERT INTO DemoTable1835 VALUES('45,67,89');
mysql> INSERT INTO DemoTable1835 VALUES('98,96,49');

การสุ่มข้อมูลพร้อมเงื่อนไข

ใช้ ORDER BY RAND() ร่วมกับ NOT IN และ LIMIT:

mysql> SELECT * FROM DemoTable1835
    WHERE ListOfIds NOT IN(10,20,70)
    ORDER BY RAND()
    LIMIT 2;

ผลลัพธ์ (สุ่ม 2 แถวที่ไม่มีค่า 10, 20, 70):

+-----------+
| ListOfIds |
+-----------+
| 98,96,49  |
| 45,67,89  |
+-----------+

คำเตือนเกี่ยวกับประสิทธิภาพ

  • ORDER BY RAND() อาจช้าเมื่อตารางมีข้อมูลมาก
  • สำหรับตารางใหญ่ ควรใช้วิธีอื่น เช่นสุ่ม ID แล้ว JOIN
  • คอลัมน์ที่เก็บค่าคั่นด้วยจุลภาคไม่เหมาะกับการค้นหาดัชนี (Non-SARGable)

แนวทางแก้ไขข้อมูล

แนะนำให้ปรับโครงสร้างข้อมูลเป็นตารางความสัมพันธ์ (Normalized) แทนการเก็บค่าหลายค่าในคอลัมน์เดียว