साधारण समानता जांच के लिए (=
), एक varchar
. पर एक बी-ट्री इंडेक्स या text
कॉलम सरल और सबसे अच्छा विकल्प है। यह निश्चित रूप से प्रदर्शन में मदद करता है बहुत ।
बेशक, एक साधारण integer
. पर एक बी-ट्री इंडेक्स बेहतर प्रदर्शन करता है। शुरुआत के लिए, सरल integer
की तुलना करना मान थोड़ा तेज है। लेकिन इससे भी महत्वपूर्ण बात यह है कि प्रदर्शन भी सूचकांक के आकार का एक कार्य है। बड़े कॉलम का अर्थ है प्रति डेटा पृष्ठ पर कम पंक्तियाँ, यानी अधिक पृष्ठों को पढ़ना होगा ...
चूंकि HomeAddress
वैसे भी शायद ही अद्वितीय है, यह एक अच्छी प्राकृतिक प्राथमिक कुंजी नहीं है। मेरा सुझाव है कि सरोगेट प्राथमिक कुंजी . का उपयोग करें बजाय। एक serial
स्तंभ
उसके लिए स्पष्ट विकल्प है। इसका एकमात्र उद्देश्य काम करने के लिए एक सरल, तेज़ प्राथमिक कुंजी है।
यदि आपके पास उक्त तालिका को संदर्भित करने वाली अन्य तालिकाएँ हैं, तो यह और भी अधिक कुशल हो जाती है। विदेशी कुंजी कॉलम के लिए एक लंबी स्ट्रिंग को डुप्लिकेट करने के बजाय, आपको पूर्णांक कॉलम के लिए केवल 4 बाइट्स की आवश्यकता होती है। और आपको अपडेट को इतना अधिक कैस्केड करने की आवश्यकता नहीं है, क्योंकि एक पता बदलने के लिए बाध्य है, जबकि एक सरोगेट पीके वही रह सकता है (लेकिन निश्चित रूप से ऐसा नहीं है)।
आपकी टेबल कुछ इस तरह दिख सकती है:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
इसका परिणाम दो बी-ट्री इंडेक्स में होता है। resident_id
. पर एक अद्वितीय अनुक्रमणिका और address
. पर एक सादा अनुक्रमणिका ।
मैनुअल में इंडेक्स के बारे में अधिक जानकारी
.
Postgres बहुत सारे विकल्प प्रदान करता है - लेकिन इस साधारण मामले के लिए आपको किसी और की आवश्यकता नहीं है।