तकनीक 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-समस्या