समाधान: ORDER BY RAND() LIMIT N
टेबल से यादृच्छिक पंक्तियाँ प्राप्त करने के लिए ORDER BY RAND() के साथ LIMIT का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY RAND() LIMIT yourIntegerNumber;
व्यावहारिक उदाहरण
टेबल बनाना और 13 रिकॉर्ड डालना
mysql> CREATE TABLE gettingRandomRow (
-> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName VARCHAR(100)
-> );
mysql> INSERT INTO gettingRandomRow(CustomerName) VALUES
-> ('Chris'), ('Robert'), ('Ramit'), ('James'), ('Jace'),
-> ('Mike'), ('Sam'), ('Bob'), ('Carol'), ('David'),
-> ('Maxwell'), ('Larry'), ('John');
केस 1: 1 यादृच्छिक पंक्ति
mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 1; +------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 13 | John | +------------+--------------+
केस 2: 2 यादृच्छिक पंक्तियाँ (पहला रन)
mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 2; +------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 2 | Robert | | 3 | Ramit | +------------+--------------+
केस 3: 2 यादृच्छिक पंक्तियाँ (दूसरा रन - अलग परिणाम)
mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 2; +------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 4 | James | | 9 | Carol | +------------+--------------+
⚠️ प्रदर्शन चेतावनी: बड़े टेबल पर धीमा
ORDER BY RAND() पूर्ण टेबल स्कैन और फाइलसॉर्ट करता है।
- 10,000+ पंक्तियों पर ध्यान देने योग्य धीमा
- 100,000+ पंक्तियों पर बहुत धीमा
- इंडेक्स का उपयोग नहीं कर सकता
बड़े टेबल के लिए बेहतर विकल्प
विधि 1: MAX(ID) के साथ रैंडम ऑफसेट (लगातार ID के लिए)
SELECT * FROM yourTable WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM yourTable))) ORDER BY id LIMIT 1;
विधि 2: दो क्वेरी (काउंट फिर ऑफसेट)
SELECT COUNT(*) INTO @total FROM yourTable; SET @offset = FLOOR(RAND() * @total); PREPARE stmt FROM 'SELECT * FROM yourTable LIMIT ?, 1'; EXECUTE stmt USING @offset;
विधि 3: रैंडम कॉलम जोड़ना (MySQL 8.0+)
ALTER TABLE yourTable ADD COLUMN rand_sort DOUBLE AS (RAND()) STORED; CREATE INDEX idx_rand_sort ON yourTable(rand_sort); -- फिर तेज़ यादृच्छिक चयन SELECT * FROM yourTable ORDER BY rand_sort LIMIT 10;
नमूना तालिका: विधि तुलना
| विधि | टेबल आकार | गति | सच्ची यादृच्छिकता |
|---|---|---|---|
| ORDER BY RAND() | छोटा (<10K) | तेज़ | हाँ |
| MAX(ID) ऑफसेट | बड़ा | तेज़ | लगभग (ID गैप के कारण) |
| काउंट + ऑफसेट | बड़ा | मध्यम | हाँ |
| रैंडम कॉलम इंडेक्स | बहुत बड़ा | बहुत तेज़ | हाँ |