முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 10 · பாடம் 1 இன் 4பாடத்திட்டத்தில் 37/57~15 min
தொகுதி பாடங்கள் (1/4)

குறியீடுகள் மற்றும் பி-மரங்கள்

ஒரு தரவுத்தளமானது ஒரு நொடியின் பின்னங்களில் மில்லியன் கணக்கான வரிசைகளில் ஒரு பதிவை எவ்வாறு கண்டறிய முடியும்?

இயல்பாக, நாம் SELECT * FROM customers WHERE city = 'Milano' ஐக் கேட்கும்போது, ​​Postgres ஒரு சீக்வென்ஷியல் ஸ்கேன் செய்ய வேண்டும்: அது ஒவ்வொரு நகரத்தையும் "Milano" உடன் ஒப்பிட்டு, வட்டில் இருந்து வரிசையாக முழு அட்டவணையையும் படிக்கிறது. ஒரு அட்டவணை மில்லியன் கணக்கான பதிவுகளை வைத்திருக்கும் போது, ​​இந்த செயல்முறை செயல்திறனை முடக்குகிறது.

இந்த இடையூறுகளுக்கான முக்கிய கட்டமைப்பு பதில் குறியீடுகள்.

குறியீடுகள் (பி-மரங்கள்)

ஒரு பெரிய புத்தகத்தின் பின்புறத்தில் உள்ள பகுப்பாய்வு குறியீட்டைப் போலவே குறியீடுகள் சரியாக வேலை செய்கின்றன. "மிலானோ" பற்றி எங்கு பேசுகிறது என்பதைக் கண்டுபிடிக்க முழு புத்தகத்தையும் படிப்பதற்குப் பதிலாக, "மிலானோ" என்ற வார்த்தை நம்மை [p. 45, 114, 230] க்கு திருப்பிவிடும் பின் பக்கங்களைப் பார்க்கிறோம். தரவுத்தளங்கள், திரைக்குப் பின்னால், இந்த தனித்தனி, மிகவும் கச்சிதமான தரவு கட்டமைப்பை (பெரும்பாலும் "பி-ட்ரீ") உருவாக்குகின்றன, இது நெடுவரிசை அல்லது நெடுவரிசைகளால் வரிசைப்படுத்தப்படுகிறது, பொருந்தக்கூடிய வரிசைகளின் இயற்பியல் சேமிப்பகத்திற்கான நேரடி சுட்டிகளைக் கொண்டுள்ளது.

SQL
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);

இந்த ஒற்றைச் செயல்பாடு Postgres இன்ஜினைத் தூண்டுகிறது, இது பின்புலத்தில் உள்ள அனைத்து city மதிப்புகளையும் பிரித்தெடுத்து அட்டவணைப்படுத்தும். முடிந்ததும், ஒவ்வொரு அடுத்தடுத்த SELECT ... WHERE city = '...' பறக்கும்!

முதன்மை விசைகள் மற்றும் தனித்துவம்

முதன்மை விசை (PRIMARY KEY) மற்றும் UNIQUE முக்கிய விதிகள் ரகசியமாக இன்டெக்ஸ்களைப் பயன்படுத்துகின்றன என்பது உங்களுக்குத் தெரியுமா? வரிசைகளைச் செருகும்போது அல்லது மாற்றும்போது ஒரு மின்னஞ்சல் அல்லது ஐடி நகல் எடுக்கப்படாமல் இருப்பதை DB உறுதிசெய்ய வேண்டும் என்பதால், PostgreSQL தானாகவே அவற்றின் மேல் ஒரு மறைமுகமான B-Tree குறியீட்டை உருவாக்குகிறது: இந்த வழியில் தனித்துவச் சரிபார்ப்பு மைக்ரோ விநாடிகள் ஆகும்.

அதனால்தான் ID புலத்தில் சேர்வது நம்பமுடியாத அளவிற்குச் செயல்படுகிறது.

ஒரு குறியீட்டை கைவிடுதல்

கனமான வினவல்கள் மாறிவிட்டன என்பதை நீங்கள் உணர்ந்தால் மற்றும் ஒரு குறியீட்டை ஒருபோதும் கலந்தாலோசிக்கவில்லை என்றால், அதை அழித்துவிட்டு முக்கிய இடத்தைப் பெறுவது புத்திசாலித்தனம்:

SQL
DROP INDEX idx_customers_city;

உங்கள் முறை

உடற்பயிற்சி#sql.m10.l1.e1
முயற்சிகள்: 0ஏற்றுகிறது…

எங்கள் ஈ-காமர்ஸில் நாங்கள் வாடிக்கையாளர்களை தேசியத்தின் அடிப்படையில் (வாடிக்கையாளர்களின் நாடு நெடுவரிசை) அடிக்கடி வடிகட்டுவதை டாஷ்போர்டுகள் மூலம் கவனிக்கிறோம். \nநாட்டின் நெடுவரிசையில் புதிய அடிப்படைக் குறியீட்டை உருவாக்கி அதற்கு 'idx_customers_country' என்று பெயரிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

அட்டவணை_பெயர் (column_name) இல் CREATE INDEX index_name ஐப் பயன்படுத்தவும்;

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

இரண்டாம் நிலை தனிப்பட்ட குறியீடுகளை ஆராய்தல்

உடற்பயிற்சி#sql.m10.l1.e2
முயற்சிகள்: 0ஏற்றுகிறது…

B-Tree இன்டெக்ஸ் உருவாக்கப்படும் நேரத்தில் ஒரு தனித்துவமான தடையை உருவகப்படுத்தவும், தேடுதல்களை விரைவுபடுத்தவும் பயன்படுத்தப்படலாம், அதே நேரத்தில் தர்க்கரீதியான நோக்கத்தை வெளிப்படையாகவும் செயல்படுத்தவும்.\n\nநீங்கள் தனித்துவமான முக்கிய சொல்லை அறிவிக்கும் இடத்தில் ஒரு புதிய குறியீட்டை உருவாக்கவும். அதை வரையறுத்து, பிற பயனர்களிடமிருந்து தேவையற்ற நகல் பதிவுகளை இது தடுக்கிறது, 'வாடிக்கையாளர்கள்' என்ற 'மின்னஞ்சல்' நெடுவரிசையில் தனித்துவத்தை கட்டாயப்படுத்தி, அதற்கு 'idx_unique_email_customer' என்று பெயரிடுங்கள்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

CREATE UNIQUE INDEX index_name ஐ அட்டவணையில் எழுதவும் (நெடுவரிசை);

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்