2010-08-09 2 views
5

मैं COUNT12 (*) का उपयोग करके, हमारे डेटाबेस में प्रत्येक तालिका की पंक्ति गणना निर्धारित करने के लिए sp_MSforeachtable अंतर्निहित संग्रहीत प्रक्रिया का उपयोग कर रहा हूं।तालिका में कोई पंक्तियां देखने के लिए मैं सबसे सस्ता सवाल क्या देख सकता हूं?

मुझे एहसास हुआ है कि, मुझे लगता है कि मुझे बस 0 या 1 चाहिए, इस पर निर्भर करता है कि तालिका में कोई पंक्तियां हैं या नहीं।

क्या कुछ और है जो मैं COUNT (*) से तेज़/सस्ता उपयोग कर सकता हूं?

+0

http://stackoverflow.com/questions/1597442/subquery-using-exists-1-or-exists पर एक नज़र डालें प्रिंट होगा – StuartLC

+1

जो भी जवाब आप के साथ आते हैं उसे बेंचमार्क किया जाना चाहिए। COUNT (*) शायद डीबीएमएस के आधार पर अच्छी तरह अनुकूलित है, इसके अतिरिक्त यह स्पष्ट रूप से स्पष्ट करता है कि आप क्या करने की कोशिश कर रहे हैं। –

उत्तर

8

इस क्वेरी पर विचार करें। EXISTS पहला मैच मिलने पर निष्पादन रोक देगा।

IF EXISTS (SELECT 1 FROM MyTable) 
BEGIN 
    print 'at least one!' 
END 
ELSE 
BEGIN 
    print 'no rows found in table' 
END 
+0

@ डाउनवॉटर: समझाएं कि यह समस्या का समाधान क्यों नहीं करता है और/या ओपी की मदद करता है? –

0

शायद पहले पंक्ति को पकड़ें, और 1 प्रदर्शित करें?

select top 1 1 from tablename

+4

यह सुनिश्चित नहीं है कि यह TSQL के लिए क्यों अपरिवर्तित था? –

+0

@ p.campbell: आप डाउनवॉटिंग पर अपना खुद का प्रतिनिधि खर्च करने के बजाय, केवल सुधार के लिए पूछ सकते हैं। :) सुधार सही दिखता है? –

+0

@ p.campbell; वैसे भी आपको एक उपरांत दिया, उम्मीद है कि इसके लिए तैयार है। –

0
SELECT TOP 1 ID FROM TABLE 

तो फिर तुम एक EOF जांच जब recordset दिया जाता है कर सकते हैं।

0

sp_spaceused शायद COUNT(*) से अधिक कुशल होगा।

ध्यान रखें कि यह वास्तविक समय में अपडेट नहीं होता है, इसलिए यह सभी मामलों में 100% सटीक नहीं हो सकता है।

3

यह सब तालिका नामों में कम से कम 1 पंक्ति

exec sp_MSforeachtable 'if exists (select 1 from ?) print ''?''' 
संबंधित मुद्दे