यह एक बहुत ही व्यापक सवाल है जो मूल रूप से "यह निर्भर करता है" तक उबाल जाता है। इसे प्रभावित करने वाले कारकों में शामिल हैं:
आपके समेकन का स्तर क्या है? एक डिलीट स्टेटमेंट प्रभावित पंक्तियों पर एक विशेष लॉक रखता है। डाटाबेस इंजन, हटाए गए डेटा वितरण इत्यादि के आधार पर, जो पेज या पूरी तालिका में बढ़ सकता है। क्या आपके डेटा पाठकों को हटाने की अवधि के लिए अवरुद्ध किया जा सकता है?
हटाए गए कथन कितना जटिल है? आप कितने अन्य टेबल में शामिल हो रहे हैं, या जटिल कहां हैं? कभी-कभी हटाने के लिए पंक्तियों की पहचान हटाने के मुकाबले अधिक "महंगी" हो सकती है, इसलिए एक बड़ा हटाना "सस्ता" हो सकता है।
क्या आप डेडलॉक्स के बारे में डरते हैं? जैसे ही आप अपने डिलीट के आकार को कम करते हैं, आपका डेडलॉक "पैर प्रिंट" कम हो जाता है। आदर्श रूप से, सिंगल-पंक्ति डिलीट हमेशा सफल होंगे।
क्या आप थ्रूपुट प्रदर्शन की परवाह करते हैं? किसी भी एसक्यूएल कथन के साथ, आम तौर पर लगातार ओवरहेड (कनेक्शन सामान, क्वेरी पार्सिंग, रिटर्निंग परिणाम इत्यादि) होती है। एकल-कनेक्शन बिंदु दृश्य से, 1000-लाइन डिलीट 1000 x 1-लाइन डिलीट से तेज होगी।
इंडेक्स रखरखाव ओवरहेड, विखंडन सफाई, या किसी भी ट्रिगर्स के बारे में न भूलें। वे आपके सिस्टम को भी प्रभावित कर सकते हैं।
सामान्य रूप से, हालांकि, मैं प्रति पंक्ति 1000-पंक्तियों पर बेंचमार्क करता हूं। जिन प्रणालियों के साथ मैंने काम किया है (सब- "एंटरप्राइज़") प्रति डिलीट 500 और 5000 रिकॉर्ड के बीच एक मीठा स्थान के साथ समाप्त होता है। मैं कुछ इस तरह करना पसंद:
set rowcount 500
select 1 -- Just to force @@rowcount > 0
while @@ROWCOUNT > 0
delete from [table]
[where ...]
इस अस्पष्ट प्रश्न का उत्तर नहीं दिया जा सकता है। कोई रजत बुलेट – zerkms
नहीं है हम बैच को रात में स्थानांतरित करने के लिए एक टेबल से दूसरे स्थान पर रिकॉर्ड ले जाने के लिए उपयोग करते हैं। हम 10,000 के बैच चलाते हैं और प्रदर्शन हिट नगण्य है। – Dimitri
आपको सर्वोत्तम सीमा प्राप्त करने के लिए कुछ सीमाएं और सर्वर प्रदर्शन की निगरानी करने की आवश्यकता होगी। – piotrekkr