मेरी टिप्पणियों को एक उत्तर में निकालना:यहां इंडेक्स लुकअप बहुत तेज़ था - वास्तविक पंक्तियों को पुनर्प्राप्त करने में हर समय बिताया गया था। 23 सेकंड / 7871 पंक्तियाँ =2.9 मिलीसेकंड प्रति पंक्ति, जो डिस्क सबसिस्टम में बिखरे हुए डेटा को पुनः प्राप्त करने के लिए उचित है। तलाश धीमी है; आप a) अपने डेटासेट को RAM में फ़िट कर सकते हैं, b) SSDs खरीद सकते हैं, या c) अपने डेटा को समय से पहले व्यवस्थित कर सकते हैं ताकि खोज को कम किया जा सके।
PostgreSQL 9.2 में इंडेक्स-ओनली स्कैन नामक एक सुविधा है जो इसे (आमतौर पर) तालिका तक पहुंच के बिना प्रश्नों का उत्तर देने की अनुमति देती है। आप इसे btree
. के साथ जोड़ सकते हैं इस क्वेरी को तेज़ बनाने के लिए स्वचालित रूप से ऑर्डर बनाए रखने की अनुक्रमणिका संपत्ति। आप int1
. का उल्लेख करते हैं , int2
, और दो फ़्लोट्स:
CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);
SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index
यह भी ध्यान दें कि यह डिस्क की खोज को जादुई रूप से मिटा नहीं देता है, यह उन्हें केवल क्वेरी समय से समय सम्मिलित करने के लिए ले जाता है। चूंकि आप डेटा की नकल कर रहे हैं, इसलिए यह आपके लिए संग्रहण स्थान भी खर्च करता है। फिर भी, शायद यही वह समझौता है जो आप चाहते हैं।