मुझे एक डेटाबेस में कुछ डुप्लिकेट मिले हैं, जिनका मैं निरीक्षण करना चाहता हूं, इसलिए मैंने जो डुप्लिकेट हैं, उन्हें देखने के लिए मैंने क्या किया:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
इस तरह, मैं प्रासंगिक पंक्तियों के साथ सभी पंक्तियों को एक से अधिक बार प्रस्तुत करूँगा। यह क्वेरी निष्पादित करने के लिए मिलीसेकंड लेता है।
अब, मैं प्रत्येक डुप्लिकेट का निरीक्षण करना चाहता था, इसलिए मैंने सोचा कि मैं उपरोक्त पंक्ति में एक प्रासंगिक_फ़ील्ड के साथ some_table में प्रत्येक पंक्ति का चयन कर सकता हूं, इसलिए मुझे यह पसंद आया:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
यह किसी कारण से बहुत धीमी गति से निकलता है (मिनट लगते हैं)। क्या वास्तव में यहाँ चल रहा है कि इसे धीमा करने के लिए? प्रासंगिक_फ़ील्ड अनुक्रमित है।
आखिरकार मैंने पहली क्वेरी से "temp_view" दृश्य बनाने की कोशिश की (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
, और फिर इसके बजाय अपनी दूसरी क्वेरी बना रहा हूं:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
और यह ठीक काम करता है। MySQL कुछ मिलीसेकंड में ऐसा करता है।
यहां कोई भी SQL विशेषज्ञ समझा सकता है कि क्या हो रहा है?