การสุ่มเลือกชื่อตารางจาก INFORMATION_SCHEMA
เมื่อต้องการสุ่มเลือกตารางจากฐานข้อมูลที่มีจำนวนมาก ให้สอบถามจาก INFORMATION_SCHEMA.TABLES ร่วมกับ ORDER BY RAND() และ LIMIT
รูปแบบคำสั่ง
SELECT TABLE_NAME AS alias_name
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
ORDER BY RAND()
LIMIT your_limit_number;
ตัวอย่าง: สุ่ม 4 ตารางจากฐานข้อมูล 'web'
คำสั่ง SQL
SELECT TABLE_NAME AS Random4TableName
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'web'
ORDER BY RAND()
LIMIT 4;
ผลลัพธ์ตัวอย่าง
+------------------+
| Random4TableName |
+------------------+
| demotable474 |
| demotable313 |
| demotable452 |
| demotable382 |
+------------------+
4 rows in set (0.20 sec)
คำอธิบายแต่ละส่วน
| ส่วน | คำอธิบาย |
|---|---|
INFORMATION_SCHEMA.TABLES | System view ที่เก็บข้อมูลเมตาของทุกตาราง |
TABLE_SCHEMA | ชื่อฐานข้อมูล (Database name) |
TABLE_NAME | ชื่อตาราง |
ORDER BY RAND() | สุ่มลำดับแถว |
LIMIT 4 | จำกัดผลลัพธ์ 4 แถว |
ข้อควรระวังด้านประสิทธิภาพ
ORDER BY RAND()ต้องอ่านทุกแถวและสร้างค่าสุ่มให้ทุกแถว → ช้าเมื่อตารางเยอะมาก- สำหรับฐานข้อมูลที่มีตารางหลายหมื่น ตาราง ควรพิจารณาวิธีอื่น
วิธีเลือกสุ่มที่เร็วกว่า (สำหรับตารางใหญ่มาก)
-- วิธี 1: ใช้ OFFSET แบบสุ่ม (ต้องรู้จำนวนตารางก่อน)
SELECT COUNT(*) INTO @total FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'web';
SET @offset = FLOOR(RAND() * @total);
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'web' LIMIT 1 OFFSET @offset;
-- ทำซ้ำ 4 ครั้ง หรือใช้ UNION
-- วิธี 2: ใช้ PRIMARY KEY ของ INFORMATION_SCHEMA (หากรองรับ)
-- ไม่แนะนำให้ใช้โดยตรง เพราะเป็น System Table
กรณีใช้งานจริง
- การทดสอบ (Testing) ตารางสุ่ม
- การ Audit ตารางแบบสุ่ม
- การสร้างข้อมูลตัวอย่าง (Sample data)