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

MYSQL - एकाधिक क्वेरी से एकल sql क्वेरी बनाएं

तकनीक 1:अदिश का संयोजन:

SELECT a ... LIMIT 1;
SELECT b ... LIMIT 1;

-->

SELECT
    ( SELECT a ... LIMIT 1) AS a,
    ( SELECT b ... LIMIT 1) AS b ;

अगर a कुछ इस तरह है COUNT(*) , तो आप जानते हैं कि ठीक एक परिणाम होगा; इसलिए LIMIT 1 अनावश्यक है।

यदि उनमें से एक सबक्वेरी कोई पंक्ति नहीं लौटाती है, तो आपको NULL . मिलता है ।

तकनीक 2:एक चयन का उपयोग लगभग कहीं भी किया जा सकता है जहां एक अभिव्यक्ति का उपयोग किया जा सकता है। उपरोक्त तकनीकी रूप से इसका एक उदाहरण है। साथ ही...

SELECT ... WHERE x = ( SELECT ... ) ...

फिर से, सबक्वेरी को इसे संभव बनाने के लिए एक ही पंक्ति लौटानी होगी।

SELECT ...
    WHERE x LIKE CONCAT('%', ( SELECT ... ), '%')
    ...;

सबक्वेरी के मूल्यांकन के बाद यह कुछ इस तरह हो जाता है:

SELECT
    WHERE x LIKE '%foo%'
    ...;

(यह कुशल नहीं है, लेकिन यह काम करता है।)

ये 3 समान हैं, लेकिन जरूरी नहीं कि एक दूसरे की तरह कुशल हों:

SELECT ...
    WHERE x IN ( SELECT ... )

SELECT ... FROM A
    WHERE EXISTS( SELECT ... FROM B
                  WHERE B.x = A.x )

SELECT ... FROM A JOIN B ON B.x = A.x

यह समान है लेकिन मेल खाने वाले आइटम ढूंढता है जो अनुपलब्ध हैं बी से:

SELECT ... FROM A LEFT JOIN B ON B.x = A.x
    WHERE B.id IS NULL
    

UNION समान आउटपुट वाले प्रश्नों के लिए उपयोग किया जाना चाहिए:

SELECT x,y FROM A
UNION
SELECT x,y FROM B

यह A से कितनी भी पंक्तियाँ और B से कितनी भी पंक्तियाँ उत्पन्न करेगा। यदि आप UNION DISTINCT का उपयोग करते हैं तो डुप्लिकेट हटा दिए जाते हैं , या यदि आप UNION ALL . का उपयोग करते हैं तो रखा जाता है ।

ORDER BY ... LIMIT ... मुश्किल हो जाता है। OFFSET और भी पेचीदा हो जाता है।

प्रदर्शन

  • IN ( SELECT ...) से बचें यह आमतौर पर तीनों में से धीमा होता है।
  • LIKE में अग्रणी वाइल्डकार्ड से बचें; देखें कि क्या FULLTEXT एक बेहतर विकल्प होगा।
  • INDEX(path) , INDEX(parent_id, child_id) ("कवरिंग"), INDEX(scope, path, scope_id); शायद अन्य, लेकिन मुझे SHOW CREATE TABLE see देखने की आवश्यकता है ।
  • ईएवी स्कीमा से बचें; यह प्रदर्शन के लिए बुरा है। मैंने एक लिंक जोड़ा; कई अन्य चर्चाएं देखें। साथ ही:http://mysql.rjweb.org/doc.php/eav और http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

वे आइटम हैं शायद कथनों को एक साथ मिलाने से अधिक महत्वपूर्ण (प्रदर्शन के लिए)। देखें https://meta.stackexchange.com/questions/ 66377/क्या-क्या है-xy-समस्या



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL और C :`[ईमेल संरक्षित]'| . का अपरिभाषित संदर्भ

  2. MySQL पंक्ति मानों को अल्पविराम और अधिक के साथ संयोजित करें

  3. डुप्लिकेट कुंजी अपडेट पर डालें

  4. MySQL में महीने के हिसाब से प्रतिशत ग्रोथ मंथ की गणना कैसे करें

  5. MySQL तालिका को दिन के अनुसार कैसे विभाजित करें?