MySQL में ORDER BY RAND() LIMIT 1 का उपयोग करके टेबल से एक यादृच्छिक पंक्ति चुन सकते हैं।
सिंटैक्स
SELECT * FROM टेबल_नाम ORDER BY RAND() LIMIT 1;
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable1581 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20)
-> );
2. डेटा डालें
mysql> INSERT INTO DemoTable1581(StudentName) VALUES('Chris'), ('Bob'), ('Sam'), ('Mike'), ('Carol');
3. यादृच्छिक पंक्ति चुनें
mysql> SELECT * FROM DemoTable1581 ORDER BY RAND() LIMIT 1;
4. परिणाम (उदाहरण)
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 4 | Mike | +-----------+-------------+
कैसे काम करता है
RAND()प्रत्येक पंक्ति के लिए 0 से 1 के बीच यादृच्छिक फ्लोट देता हैORDER BY RAND()पंक्तियों को यादृच्छिक क्रम में फेरबदल करता हैLIMIT 1पहली पंक्ति लेता है
प्रदर्शन चेतावनी
बड़े टेबल पर बहुत धीमा - पूर्ण टेबल स्कैन + फाइलसॉर्ट + अस्थायी टेबल।
| पंक्तियां | प्रदर्शन |
|---|---|
| < 1,000 | स्वीकार्य |
| 1,000 - 10,000 | धीमा |
| > 10,000 | बहुत धीमा (टालें) |
बड़े टेबल के लिए कुशल विकल्प
विधि 1: MAX ID + RAND (यदि ID क्रमिक)
SELECT * FROM DemoTable1581 WHERE StudentId >= (SELECT FLOOR(RAND() * (SELECT MAX(StudentId) FROM DemoTable1581))) ORDER BY StudentId LIMIT 1;
विधि 2: दो क्वेरी (एप्लिकेशन लेवल)
-- 1. गिनती प्राप्त करें SELECT COUNT(*) FROM DemoTable1581; -- मान लें 100000 -- 2. एप्लिकेशन में यादृच्छिक ऑफसेट उत्पन्न करें (0-99999) -- 3. OFFSET के साथ क्वेरी SELECT * FROM DemoTable1581 LIMIT 1 OFFSET 45231;
विधि 3: यादृच्छिक कॉलम जोड़ें
ALTER TABLE DemoTable1581 ADD COLUMN rand_sort DOUBLE; UPDATE DemoTable1581 SET rand_sort = RAND(); CREATE INDEX idx_rand ON DemoTable1581(rand_sort); -- फिर तेज़ क्वेरी SELECT * FROM DemoTable1581 ORDER BY rand_sort LIMIT 1;
नमूना आकार > 1 के लिए
SELECT * FROM DemoTable1581 ORDER BY RAND() LIMIT 10;