2015-03-05 22 views
13

अंकन उद्देश्यों के लिए, मुझे LIMIT और OFFSET क्लॉज के साथ एक क्वेरी चलाने की आवश्यकता है। लेकिन मुझे उन पंक्तियों की संख्या की भी आवश्यकता है जो LIMIT और OFFSET क्लॉज के बिना उस क्वेरी द्वारा वापस लौटाए जाएंगे।एक LIMIT/OFFSET के साथ एक क्वेरी चलाएं और पंक्तियों की कुल संख्या

मैं चलाना चाहते हैं:

SELECT * FROM table WHERE /* whatever */ ORDER BY col1 LIMIT ? OFFSET ? 

और:

SELECT COUNT(*) FROM table WHERE /* whatever */ 

एक ही समय में। क्या ऐसा करने का कोई तरीका है, विशेष रूप से एक तरीका जो पोस्टग्रेर्स को अनुकूलित करने देता है, ताकि यह अलग-अलग दोनों चलाने से तेज़ हो?

उत्तर

32

हां। एक सरल खिड़की समारोह के साथ:

SELECT *, count(*) OVER() AS full_count 
FROM tbl 
WHERE /* whatever */ 
ORDER BY col1 
LIMIT ? 
OFFSET ?

पता है कि लागत अभी भी दो अलग-अलग प्रश्नों की तुलना में सस्ता कुल संख्या के बिना से काफी अधिक है, लेकिन हो सकता है हो सकता है। Postgres वास्तव में किसी भी मामले में सभी पंक्तियों गिनती है, जो क्वालीफाइंग पंक्तियों की कुल संख्या के आधार पर लागत लगाती है। विवरण:

-4

सं

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

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