जैसा कि शीर्षक से पता चलता है ... मैं यह निर्धारित करने के लिए कम से कम ओवरहेड के साथ सबसे तेज़ तरीका निकालने की कोशिश कर रहा हूं कि क्या कोई रिकॉर्ड किसी तालिका में मौजूद है या नहीं।
नमूना प्रश्न:
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
कहते हैं कि ?
इसके साथ अदला-बदली की गई है 'TB100'
... पहले और दूसरे प्रश्न दोनों ही एक ही परिणाम लौटाएंगे ( 1
इस बातचीत के लिए ... कहते हैं)। अंतिम क्वेरी 'TB100'
अपेक्षा के अनुसार वापस आ जाएगी , या id
तालिका में मौजूद नहीं होने पर कुछ भी नहीं।
उद्देश्य यह पता लगाना id
है कि तालिका में है या नहीं। यदि नहीं, तो प्रोग्राम अगले रिकॉर्ड को सम्मिलित करेगा, यदि यह है, तो प्रोग्राम इसे छोड़ देगा या इस प्रश्न के दायरे से बाहर अन्य प्रोग्राम लॉजिक के आधार पर एक UPDATE क्वेरी का प्रदर्शन करेगा।
कौन सा तेज है और कम ओवरहेड है? (यह प्रति कार्यक्रम चलने के हजारों बार दोहराया जाएगा, और दिन में कई बार चलाया जाएगा)।
(जावा से एम $ एसक्यूएल सर्वर के खिलाफ इस क्वेरी को एम $ जेडीबीसी ड्राइवर प्रदान करता है)
if exists(select null from products where id = @id)
; यदि किसी क्लाइंट द्वारा सीधे कहे जाने वाले क्वेरी में select case when exists (...) then 1 else 0 end
।