PostgreSQL टुपल्स को बहुत अच्छी तरह से लागू करता है, (Oracle, DB2, SQL Server, आदि में पाए गए आधे कार्यान्वयन के विपरीत)। आप "टुपल्स असमानता" का उपयोग करके अपनी स्थिति लिख सकते हैं, जैसे:
select *
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10
कृपया ध्यान दें कि चूंकि दूसरा कॉलम अवरोही क्रम में है, इसलिए आपको तुलना के दौरान इसके मान को "उल्टा" करना होगा। इसलिए इसे -b
. के रूप में व्यक्त किया जाता है और साथ ही, -20
. गैर-संख्यात्मक कॉलम जैसे दिनांक, वर्चर्स, एलओबी इत्यादि के लिए यह मुश्किल हो सकता है।
अंत में, -b
. के साथ अनुक्रमणिका का उपयोग अभी भी संभव है कॉलम मान यदि आप एक एड-हॉक इंडेक्स बनाते हैं, जैसे:
create index ix1 on table1 (a, (-b), c);
हालाँकि, आप PostgreSQL को कभी भी अनुक्रमणिका का उपयोग करने के लिए बाध्य नहीं कर सकते। SQL एक घोषणात्मक भाषा है, अनिवार्य नहीं। आप प्रलोभित . कर सकते हैं ऐसा करने के लिए तालिका के आँकड़ों को अद्यतित रखते हुए, और पंक्तियों की एक छोटी संख्या का चयन करके भी। अगर आपका LIMIT
बहुत बड़ा है, इसके बजाय PostgreSQL एक पूर्ण तालिका स्कैन का उपयोग करने के लिए इच्छुक हो सकता है।