पहले दृष्टिकोण है
select a.* from a where a.id not in (select b.ida from b)
दूसरा दृष्टिकोण
select a.*
from a left outer join b on a.id = b.ida
where b.ida is null
पहले दृष्टिकोण है बहुत महंगा है। दूसरा दृष्टिकोण बेहतर है।
PostgreSql 9.4 के साथ, मैंने "क्वेरी समझाएं" फ़ंक्शन और लागत = 0.00 की लागत के रूप में पहली क्वेरी की।1982043603.32। इसके बजाय लागत की लागत के रूप में क्वेरी में शामिल होने = 45946.77..45946.78
उदाहरण के लिए, मैं सभी उत्पादों है कि कोई वाहनों के साथ संगत नहीं हैं के लिए खोज। मेरे पास 100k उत्पाद हैं और 1 मीटर से अधिक संगतताएं हैं I
select count(*) from product a left outer join compatible c on a.id=c.idprod where c.idprod is null
जॉइन क्वेरी में 5 सेकंड बिताए गए, इसके बजाय सबक्वायरी संस्करण 3 मिनट के बाद कभी समाप्त नहीं हुआ है।
स्रोत
2018-01-16 10:09:55
यह बेहद महंगा होगा क्योंकि इंजन को पूरी तरह से सबक्वायरी उत्पन्न करना पड़ता है इससे पहले कि वह टुपल्स को खत्म कर सके। सामान्य रूप से एक अच्छा विचार नहीं है। – dland