Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:रैंड द्वारा ऑर्डर करने के विकल्प ()

अपडेट 2016

यह समाधान अनुक्रमित स्तंभ . का उपयोग करके सबसे अच्छा काम करता है ।

यहां 100,000 पंक्तियों के साथ चिह्नित और अनुकूलित क्वेरी बेंच का एक सरल उदाहरण दिया गया है।

अनुकूलित:300ms

SELECT 
    g.*
FROM
    table g
        JOIN
    (SELECT 
        id
    FROM
        table
    WHERE
        RAND() < (SELECT 
                ((4 / COUNT(*)) * 10)
            FROM
                table)
    ORDER BY RAND()
    LIMIT 4) AS z ON z.id= g.id

सीमा राशि के बारे में नोट करें :सीमा 4 और 4/गिनती(*)। 4s की संख्या समान होनी चाहिए। आप कितने लौटाते हैं इसे बदलने से गति पर इतना प्रभाव नहीं पड़ता है। सीमा 4 और सीमा 1000 पर बेंचमार्क समान हैं। 10,000 की सीमा ने इसे 600ms तक ले लिया

शामिल होने के बारे में नोट करें :केवल आईडी को रैंडमाइज़ करना पूरी पंक्ति को रैंडमाइज़ करने की तुलना में तेज़ है। चूंकि इसे पूरी पंक्ति को स्मृति में कॉपी करना है, फिर इसे यादृच्छिक बनाएं। जॉइन कोई भी टेबल हो सकती है जो सबक्वेरी से जुड़ी हो, यह टेबलस्कैन को रोकने के लिए है।

ध्यान दें कि खंड कहां है :जहां गिनती यादृच्छिक किए जा रहे परिणामों की मात्रा को सीमित करती है। यह परिणामों का एक प्रतिशत लेता है और उन्हें संपूर्ण तालिका के बजाय क्रमबद्ध करता है।

उप क्वेरी नोट करें :यदि जॉइन कर रहा है और अतिरिक्त जहां क्लॉज की स्थिति है, तो आपको उन्हें सबक्वायरी और सबसबक्वेरी दोनों में रखना होगा। सटीक गणना करने और सही डेटा वापस लेने के लिए।

अप्रकाशित:1200ms

SELECT 
    g.*
FROM
    table g
ORDER BY RAND()
LIMIT 4

पेशेवर

order by rand() . से 4 गुना तेज . यह समाधान अनुक्रमित कॉलम वाली किसी भी तालिका के साथ काम कर सकता है।

विपक्ष

यह जटिल प्रश्नों के साथ थोड़ा जटिल है। उपश्रेणियों में 2 कोड आधार बनाए रखने की आवश्यकता है



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CURRENT_TIME उदाहरण – MySQL

  2. TIME_FORMAT () उदाहरण – MySQL

  3. MySQL का उपयोग करके मूल SQL क्वेरीज़ सीखें

  4. JDBC सही कथन के साथ MySQLSyntaxError अपवाद लौटा रहा है

  5. लिनक्स में डिफ़ॉल्ट MySQL/MariaDB पोर्ट कैसे बदलें