आपके द्वारा दिखाए गए सबक्वायरी विधि का उपयोग किए बिना इस क्वेरी को करने का एक सामान्य तरीका यहां दिया गया है। यह शामिल होने के आधार पर समाधान देखने के लिए @ गोडेके के अनुरोध को पूरा कर सकता है।
SELECT *
FROM movies m
LEFT OUTER JOIN seen s
ON (m.id = s.movie_id AND s.user_id = 123)
WHERE s.movie_id IS NULL;
हालाँकि, डेटाबेस के अधिकांश ब्रांडों में यह समाधान सबक्वेरी समाधान से भी बदतर प्रदर्शन कर सकता है। दोनों प्रश्नों का विश्लेषण करने के लिए EXPLAIN का उपयोग करना सबसे अच्छा है, यह देखने के लिए कि आपकी स्कीमा और डेटा को देखते हुए कौन बेहतर करेगा।
यहाँ सबक्वेरी समाधान पर एक और भिन्नता है:
SELECT *
FROM movies m
WHERE NOT EXISTS (SELECT * FROM seen s
WHERE s.movie_id = m.id
AND s.user_id=123);
यह एक सहसंबद्ध उपश्रेणी है, जिसका मूल्यांकन बाहरी क्वेरी की प्रत्येक पंक्ति के लिए किया जाना चाहिए। आमतौर पर यह महंगा होता है, और आपकी मूल उदाहरण क्वेरी बेहतर होती है। दूसरी ओर, MySQL में "NOT EXISTS
" अक्सर "column NOT IN (...)
. से बेहतर होता है "
दोबारा, आपको प्रत्येक समाधान का परीक्षण करना चाहिए और सुनिश्चित करने के लिए परिणामों की तुलना करना चाहिए। प्रदर्शन को मापे बिना कोई समाधान चुनना समय की बर्बादी है।