एसक्यूएल क्वेरी अनुकूलित करना

एक असाइनमेंट के रूप में मुझे एक मूवी डेटाबेस साफ़ करने की आवश्यकता है।

कुछ उपयोगकर्ताओं को हटा दिया गया है, और मुझे डेटाबेस में अब उपयोगकर्ताओं से रेटिंग को हटाना होगा।

मैंने यह सवाल किया

DELETE rating FROM rating LEFT JOIN (SELECT id FROM user) as A ON A.id = rating.userId WHERE A.id IS NULL;

मैंने रेटिंग.userId और user.Id पर इंडेक्स बनाये हैं

चूंकि 6000 उपयोगकर्ता और 1.000.000 रेटिंग हैं, यह बहुत लंबा समय लगता है। बेहतर प्रदर्शन के साथ, क्या कोई यह समझ सकता है कि मैं इसे कैसे कर सकता हूं, या इस तरह की एक क्वेरी?

0
@ njzk2 जरूरी नहीं है, मुझे संदेह है कि यह कोड रेटिंग से डेटा हटाना है जहां उपयोगकर्ता मौजूद नहीं है। यदि डेटाबेस में रेफरेंसियल अखंडता कॉन्फ़िगर की गई थी, तो शायद ओपी को इसे लिखना पड़ेगा।
जोड़ा लेखक Matthew, स्रोत
क्या आप "बेहद लंबे समय" को माप सकते हैं?
जोड़ा लेखक Matthew, स्रोत
बेहद लंबा समय 30 मिनट के भीतर पूरा नहीं हो रहा है। यह @ juergen-d उत्तर के साथ 23 सेकंड में पूरा हुआ :)
जोड़ा लेखक cholewa1992, स्रोत
मुझे शायद यह करना चाहिए, लेकिन यह कुछ ऐसा नहीं है जो पाठ्यक्रम कवर कर रहा है - मुझे डिस्काउंट कैस्केड पर नहीं पता था और बस इसे पढ़ा, यह बहुत अच्छा लगता है :)
जोड़ा लेखक cholewa1992, स्रोत
एआईडी = rating.userId जहां एआईडी पूर्ण है rating.userId = NULL के बराबर नहीं है?
जोड़ा लेखक njzk2, स्रोत
क्या आप कैस्केड को हटाना पसंद नहीं करते हैं?
जोड़ा लेखक njzk2, स्रोत

2 उत्तर

अनावश्यक उप-चयन हटाएं

DELETE rating 
FROM rating 
LEFT JOIN user ON user.id = rating.userId 
WHERE user.id IS NULL
0
जोड़ा
धन्यवाद! इसने एक जादू की तरह काम किया! :)
जोड़ा लेखक cholewa1992, स्रोत

यह SELECT क्वेरी चलाएं और पुष्टि करें कि ये वे पंक्तियां हैं जिन्हें आप हटाना चाहते हैं।

SELECT * FROM rating WHERE UserId NOT IN (SELECT Id FROM user);

यदि वे मेल खाते हैं तो आप बस इस तरह की एक क्वेरी चला सकते हैं।

DELETE FROM rating WHERE UserId NOT IN (SELECT Id FROM user);
0
जोड़ा