2012-05-03 9 views
9

मुझे लगता है कि यह पहले साइट पर पूछा गया है लेकिन मुझे यह नहीं मिल रहा है।एसक्यूएल चयन वक्तव्य में अस्पष्ट गणना

मैंने कुछ साइटों में देखा है कि खोज के परिणामों पर अस्पष्ट गणना है। उदाहरण के लिए, यहां स्टैक ओवरफ्लो में, जब आप कोई प्रश्न खोजते हैं, तो यह कहते हैं कि +5000 परिणाम (कभी-कभी), जीमेल में, जब आप खोजशब्दों द्वारा खोजते हैं, तो यह "सैकड़ों" कहता है और Google में यह aprox एक्स परिणाम कहता है। क्या यह उपयोगकर्ता को एक आसान-समझने वाला-एक-बड़ी संख्या दिखाने का एक तरीका है? या यह वास्तव में उन परिणामों की गणना करने का एक तेज़ तरीका है जिनका उपयोग डेटाबेस में किया जा सकता है [मैं 10 जी संस्करण के समय ओरेकल सीख रहा हूं]? कुछ "अरे, अगर आपको 1k से अधिक परिणाम मिलते हैं, तो बस रुकें और मुझे बताएं कि 1k से अधिक हैं"।

धन्यवाद

पीएस। मैं डेटाबेस के लिए नया हूँ।

+2

अच्छा सवाल देता है। मैं जवाब देने के लिए तत्पर हूं – Dariop

उत्तर

1

मैं इस कितनी तेजी से चलेंगे पता नहीं है, लेकिन आप की कोशिश कर सकते हैं:

SELECT NULL FROM your_tables WHERE your_condition AND ROWNUM <= 1001 

परिणाम देगा में पंक्तियों की गिनती 1001 रिकॉर्ड होगा> 1000

1

की तो कुल संख्या में बराबर होती है तो अस्पष्ट गिनती एक बफर है जो तुरंत प्रदर्शित किया जाएगा। यदि उपयोगकर्ता अधिक परिणाम देखना चाहता है तो वह और अधिक अनुरोध कर सकता है।

यह परिणाम प्रदर्शित करने के बाद, Google जैसे साइटों को अधिक परिणाम खोजने के लिए एक प्रदर्शन सुविधा है।

3

आमतौर पर यह संख्या प्रदर्शित करने का एक अच्छा तरीका है।

मुझे विश्वास नहीं है कि आप जो कुछ भी पूछ रहे हैं उसे करने का एक तरीका है - गणना में कुछ संख्या तक गिनने का विकल्प नहीं है।

मुझे यह भी नहीं लगता कि यह एसक्यूएल से या तो जीमेल, या स्टैक ओवरफ्लो में आ रहा है। अधिकांश खोज इंजन एक खोज में मिलान की कुल संख्या वापस कर देंगे, और फिर आपको परिणामों के माध्यम से पृष्ठ पर जाने देंगे।

http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human

+0

SQL सर्वर (जहां तक ​​मुझे पता है) पर स्टैक ओवरफ़्लो चल रहा है और [SQL का बहुत उपयोग करता है] (http://data.stackexchange.com/stackoverflow/queries)। तो मुझे यकीन नहीं है कि आप दावा क्यों करेंगे कि यह एसक्यूएल के साथ नहीं किया जाना चाहिए? –

+1

मैंने कहा नहीं है कि यह एसक्यूएल का उपयोग कर रहा है, न कि आपको SQL का उपयोग नहीं करना चाहिए। और वास्तव में, SO lucene.net का उपयोग करता है: http://blog.stackoverflow.com/2011/01/stack-overflow-search-now-81-less-crappy/ –

+0

अच्छा, संकेत –

0

आप सेट कर सकते हैं जब आप एक SQL क्वेरी कर एक

LIMIT 0, 100 

उदाहरण के लिए और:

सटीक संख्या अधिक मानव पठनीय बनाने के लिए के रूप में, यहाँ रेल से एक उदाहरण है आपको केवल पहले सौ जवाब मिलेगा। इसलिए आप अपने दर्शक को प्रिंट कर सकते हैं कि उनके अनुरोध के 100+ उत्तर हैं।

Google के लिए मैं यह नहीं कह सकता कि अगर वे वास्तव में जानते हैं कि 27'000'000'000 से अधिक अनुरोध का उत्तर है लेकिन मुझे विश्वास है कि वे वास्तव में जानते हैं। कुछ मानक अनुरोध हैं जिनके परिणाम संग्रहीत हैं और जहां पृष्ठभूमि में अद्यतन किया जाता है।

+1

'LIMIT 0, 100 के लिए धन्यवाद 'MySQL वाक्यविन्यास है ... –

2

ओरेकल के साथ, आप हमेशा सटीक की पंक्तियों की संख्या को वापस करने के लिए गणना करने के लिए विश्लेषणात्मक कार्यों का सहारा ले सकते हैं।

SELECT inner.*, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS 
FROM (
    [... your own, sorted search query ...] 
) inner 

यह आप अपने विशिष्ट सबक्वेरी के लिए पंक्तियों की कुल संख्या दे देंगे: यह इस तरह के एक प्रश्न का एक उदाहरण है।आप पेजिंग को लागू करने के साथ ही चाहते हैं, तो आप आगे इस तरह के रूप में इन एसक्यूएल भागों लपेट कर सकते हैं:

SELECT outer.* FROM (
    SELECT * FROM (
    SELECT inner.*,ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS 
    FROM (
     [... your own, sorted search query ...] 
    ) inner 
) 
    WHERE ROWNUM < :max_row 
) outer 
WHERE outer.RNUM > :min_row 

min_row और max_row बदलें सार्थक मूल्यों से। लेकिन सावधान रहें कि सटीक की गणना करना महंगा हो सकता है जब आप UNIQUE SCAN या इंडेक्स पर अपेक्षाकृत संकीर्ण RANGE SCAN संचालन का उपयोग करके फ़िल्टर नहीं कर रहे हैं। आपकी क्वेरी के लिए इस तरह के रूप 5000 एक ROWNUM <= 5000 फिल्टर का उपयोग कर Speed of paged queries in Oracle

के रूप में अन्य लोगों ने कहा, आप हमेशा एक निरपेक्ष ऊपरी सीमा हो सकता है, और फिर बस से संकेत मिलता है और अधिक से अधिक 5000+ परिणाम देखते हैं कि: इस बारे में यहां अधिक पढ़ें। ध्यान दें कि जब आप ROWNUM फ़िल्टरिंग लागू करते हैं तो ओरेकल क्वेरी को अनुकूलित करने में बहुत अच्छा हो सकता है। उस विषय यहाँ पर कुछ जानकारी खोजें:

http://www.dba-oracle.com/t_sql_tuning_rownum_equals_one.htm

संबंधित मुद्दे