2010-02-26 15 views
5

वेब पेज पर पेजिंग के लिए कोई प्रश्न लिखते समय कुल पंक्ति गणना प्राप्त करने के लिए सबसे कम महंगी विधि क्या है? क्या क्वेरी दो बार चलाने के बिना ऐसा करने का कोई तरीका है - कुल के लिए एक और सीमा के लिए अगला?SQL क्वेरी के लिए पंक्ति गणना प्राप्त करने के लिए सबसे कम महंगी विधि क्या है?

MySQL

का उपयोग

उदाहरण: पेजिंग

SELECT mycolumns FROM table LIMIT 100 

जाओ

(मैं अगर वहाँ एक कम खर्चीला तरीका है जानना चाहता हूँ) गणना हो जाओ

SELECT COUNT(*) FROM table 

मैं कैसे कर सकते हैं 2 प्रश्नों को चलाने के बिना कुल गिनती प्राप्त करें।

+0

तालिका आकार को पूर्व-गिनने का प्रयास करें और मान को स्टोर करें और समय से मूल्यों को अपडेट करने के लिए पृष्ठभूमि प्रक्रिया चलाएं समय –

उत्तर

1

यह आपको एक अतिरिक्त स्तंभ दे देंगे प्रत्येक पंक्ति है कि की कुल संख्या में शामिल है में Count बुलाया पंक्तियां:

SELECT mycolumns, (select count(*) from table) as Count 
FROM table 
LIMIT 100 
+0

क्या यह दो प्रश्नों से अधिक कुशल है? –

+1

यह अलग-अलग प्रश्नों से अधिक कुशल होगा क्योंकि आप केवल अपने आवेदन से डेटाबेस में एक कॉल कर रहे हैं। – RedFilter

+0

हालांकि यह प्रश्न टैग SQL और MySQL टैग के साथ चिह्नित है, उपरोक्त समाधान केवल कुछ SQL रूपों जैसे MySQL में काम करेगा। अन्य प्रकारों को ग्रुप बाय क्लॉज की आवश्यकता होगी। – asnyder

0
tablename से

चयन गिनती (*)

लिए सबसे कारगर तरीका तालिका में पंक्तियों की संख्या प्राप्त करने है tablename

+3

"क्या कोई प्रश्न दो बार चलाने के बिना ऐसा करने का कोई तरीका है" – thetaiko

+0

आपको यह (या मेरा) क्वेरी दो बार क्यों चलाना होगा? – Jay

+1

क्योंकि गिनती के लिए एक और पेजिंग (सीमा) के लिए दूसरा, ताकि पेज पर केवल पंक्तियों की एक्स राशि लौटा दी जा सके। आपको समस्या 1 है 2 | 3 ... पृष्ठों के नीचे अंतिम। –

0
select count(1) as counter from *table_name* 

इस slighter count(*) के रूप में प्रयोग से बेहतर है तालिका में सभी कॉलमों की जांच से बचें।

+0

पहली क्वेरी के लिए अच्छा विचार है लेकिन मैं –

+3

प्रश्नों को कैसे जोड़ूं गिनती (*) और गिनती (1) के बीच कोई अंतर नहीं है: http://asktom.oracle.com/pls/asktom/f?p=100: 11: 0 :::: P11_QUESTION_ID: 1156159920245 http://asktom.oracle.com/pls/asktom/f?p=100:11TP:::P11_QUESTION_ID:1156151916789 –

+0

यह उत्तर मुझे ऊपर उठाने से मुझे बहुत दुखी करता है। वहां इतनी सारी सामग्री है जो संदेह की छाया से परे साबित होती है कि गणना (1) गिनती (*) के बराबर है। इस अफवाह को जारी रखने का कोई कारण नहीं है। http://stackoverflow.com/questions/1221559/count-vs-count1 –

4

आप SQL_CALC_FOUND_ROWS विकल्प के साथ पहली क्वेरी चला सकते हैं, और फिर इस चलाएँ:

SELECT FOUND_ROWS(); 

http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_found-rows

+0

उत्कृष्ट - क्या यह 2 प्रश्नों के बाद महंगा है? –

+0

मैं गारंटी नहीं दे सकता कि यह सभी मामलों में 2 प्रश्नों से कम * महंगा * होगा, लेकिन यह निश्चित रूप से * अधिक * महंगा नहीं होना चाहिए। तुलना कई कारकों पर निर्भर करेगी: स्टोरेज इंजन (टेबल), तालिका का आकार, कॉलम का चयन किया जा रहा है, जहां खंड, इंडेक्स बनाम पूर्ण स्कैन इत्यादि। –

+0

संक्षेप में, यदि आप प्रदर्शन के बारे में चिंतित हैं तो आप कुछ करना चाहते हैं अपने विशिष्ट डेटा के साथ परीक्षण। –

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

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