MySQL में टेबल से एक रैंडम पंक्ति प्राप्त करने के लिए ORDER BY RAND() के साथ LIMIT 1 का उपयोग करें। यह नमूना लेने, A/B टेस्टिंग, या फीचर्ड सामग्री दिखाने के लिए उपयोगी है।
सिंटैक्स
SELECT * FROM table_name ORDER BY RAND() LIMIT 1;
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable735 (Amount INT); Query OK, 0 rows affected (0.57 sec) mysql> INSERT INTO DemoTable735 VALUES (984474734), (489393323), (23432333), (8949933); Query OK, 4 rows affected (0.15 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable735; +-----------+ | Amount | +-----------+ | 984474734 | | 489393323 | | 23432333 | | 8949933 | +-----------+ 4 rows in set (0.00 sec)
3. रैंडम पंक्ति चुनें
mysql> SELECT * FROM DemoTable735 ORDER BY RAND() LIMIT 1; +-----------+ | Amount | +-----------+ | 489393323 | -- हर बार अलग परिणाम संभव +-----------+ 1 row in set (0.00 sec)
प्रदर्शन चेतावनी ⚠️
ORDER BY RAND() बड़े टेबल्स पर बहुत धीमा है!
- पूरी टेबल पढ़ता है, प्रत्येक पंक्ति के लिए रैंडम मान उत्पन्न करता है, क्रमबद्ध करता है
- 10,000+ पंक्तियों पर ध्यान देने योग्य विलंब
- 1,000,000+ पंक्तियों पर बहुत धीमा
बड़े टेबल्स के लिए कुशल विकल्प
विधि 1: MAX(ID) पर रैंडम ऑफसेट (यदि ID क्रमिक है)
SELECT * FROM table_name WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM table_name))) ORDER BY id LIMIT 1;
विधि 2: दो क्वेरीज़ (एप्लिकेशन लेयर पर)
-- 1. गिनती प्राप्त करें SELECT COUNT(*) FROM table_name; -- मान लें 10000 -- 2. एप्लिकेशन में रैंडम ऑफसेट जनरेट करें (0-9999) -- 3. ऑफसेट के साथ क्वेरी SELECT * FROM table_name LIMIT 1 OFFSET 4321;
विधि 3: रैंडम कॉलम जोड़ें (लिखने पर जनरेट)
ALTER TABLE table_name ADD COLUMN rand_val DOUBLE AS (RAND()) STORED; ALTER TABLE table_name ADD INDEX idx_rand (rand_val); -- फिर तेज़ क्वेरी SELECT * FROM table_name ORDER BY rand_val LIMIT 1;
विधि 4: TABLESAMPLE (MySQL 8.0.23+ - केवल InnoDB)
SELECT * FROM table_name TABLESAMPLE SYSTEM (1) LIMIT 1;
एकाधिक रैंडम पंक्तियाँ
-- 5 रैंडम पंक्तियाँ SELECT * FROM table_name ORDER BY RAND() LIMIT 5;
भारित रैंडम चयन
-- वजन कॉलम के आधार पर SELECT * FROM table_name ORDER BY RAND() * weight_column DESC LIMIT 1;
सारांश
| टेबल आकार | अनुशंसित विधि |
|---|---|
| < 1,000 पंक्तियाँ | ORDER BY RAND() LIMIT 1 ठीक है |
| 1,000 - 100,000 | रैंडम ऑफसेट या रैंडम कॉलम |
| > 100,000 | रैंडम कॉलम + इंडेक्स या TABLESAMPLE |