தொகுதி பாடங்கள் (3/4)
கூட்டு மற்றும் பகுதி குறியீடுகள்
முந்தைய பாடங்களில் நேரியல் DBMS வினவல்களுக்கான குறியீடுகளைப் பயன்படுத்தினோம் (WHERE country = 'Italy'). இரண்டு ஒருங்கிணைந்த முனைகளில் தேடும்போது என்ன செய்வது?
எடுத்துக்காட்டாக, உண்மையான ஈ-காமர்ஸில் குறிப்பிட்ட வாடிக்கையாளர் ஐடிக்கு சொந்தமான ஆர்டர்களைக் கண்டறிய நாம் விரும்பலாம் மற்றும் கொடுக்கப்பட்ட கால வரம்பிற்குள்:
WHERE customer_id = 90 AND placed_at >= '2025-01-01'.
உங்களிடம் customer_id இல் மட்டுமே அடிப்படைக் குறியீடு இருந்தால், பைனரி மரத்தைப் பயன்படுத்தி எந்த நேரத்திலும் வாடிக்கையாளரின் 50 ஆர்டர்களை Postgres கண்டுபிடிக்கும், ஆனால் அது 50 ஐ கைமுறையாகவும் வரிசையாகவும், சோம்பேறித்தனமாக கண்களால் தேதிகளை வடிகட்ட வேண்டும்.
கூட்டு குறியீடுகள்
"பகுப்பாய்வு அகராதி" கோப்புகளை ஒரு முக்கிய பரிமாணத்தில் இல்லாமல், பலவற்றுடன் ஆர்டர் செய்யும்படி DBMS க்கு சொல்லலாம்.
CREATE INDEX idx_orders_customer_date ON orders(customer_id, placed_at);ஒரு "கலப்பு" குறியீட்டு அதன் அளவுருக்களின் வரிசையை மிகவும் முக்கியமானதாகக் கருதுகிறது: இங்கே B-Tree nodes குழு மற்றும் ஒரு தொகுதியில் customer_id ஐ கடுமையாக வகைப்படுத்துகிறது (பிரிவதற்கான மிகவும் பாகுபாடு); அவற்றின் உள்ளே துணை மரம் பல்வேறு placed_at நேர மதிப்புகளுடன் முழுமையாக வரிசைப்படுத்தப்பட்ட வரிசையில் வாழ்கிறது.
இந்த அமைப்பு பல உள்ளமை கணிப்புகளுடன் WHERE உட்பிரிவுகளை கொடூரமாக அழிக்கிறது.
பகுதி குறியீடுகள் (வடிகட்டப்பட்ட குறியீடுகள்)
ஒவ்வொரு குறியீட்டிற்கும் பயனர் உள்ளீடு ஸ்ட்ரீம்களில் வட்டு இடம் மற்றும் CPU செலவாகும். e-காமர்ஸ் ஒரு வடிப்பானைத் தொடர்ந்து வரிசைப்படுத்தி மீட்டெடுக்க வேண்டும், ஆனால் சிறுபான்மை பதிவுகளுக்கு மட்டும் என்ன செய்வது? (உதாரணமாக: படிக்காத அறிவிப்புகள் சரிபார்ப்பை விரைவாக வாக்கெடுப்பு.) அனைத்து 10,000,000 அறிவிப்புகளிலும் "is_read" குறியீட்டை உருவாக்குவது, "படிக்காதது" அவற்றில் 5ஐ மட்டுமே குறிக்கும் என்றால் நம்பமுடியாத அளவிற்கு கடினமானது.
CREATE INDEX idx_unread_notifs ON notifications(user_id)
WHERE is_read = false; -- Questa aggiuntiva è l'"Indice Parziale"தரவுத்தளமானது மின்னல் வேகமான B-Treeயை உருவாக்கும், இது பதிவு படிக்காததாக இருந்தால், DBக்கான விரைவான அணுகல் விசைகளை மட்டும் சேமிக்கும்! வட்டு 10 மில்லியனுக்குப் பதிலாக 5 வரிசைகளின் (3 பைட்டுகள்) குறியீட்டைக் காதலிக்கும். விரைவான தேர்வுகள் முழுமையாகப் பயனடைகின்றன:
SELECT * FROM notifications WHERE user_id = 2 AND is_read = false;
உங்கள் முறை
நாங்கள் தற்காலிக கடவுச்சொற்களின் தேடலை மேம்படுத்த விரும்புகிறோம் / டோக்கன்களை மீட்டமைக்க விரும்புகிறோம். ஒரு குறிப்பிட்ட நாட்டிலிருந்து அறியப்பட்ட நகரத்துடன் இணைந்து பதிவுசெய்த அனைத்து வாடிக்கையாளர்களையும் நாங்கள் அடிக்கடி SELECT அழைப்புகளைச் செய்வோம்.\n'வாடிக்கையாளர்கள்' இல் 'idx_cust_loc' என்ற கூட்டு குறியீட்டை உருவாக்கவும். முதலில் 'நாடு' புலத்தையும் (இது மிகவும் பிரத்தியேகமானது) பின்னர் 'நகரம்' புலத்தையும் கடந்து செல்லவும்.
குறிப்பைக் காட்டு
தொடரியல்: அட்டவணையில் குறியீட்டு பெயரை உருவாக்கவும் (col1, col2);
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
நிபந்தனை (பகுதி) குறியீடுகளை ஆராய்தல்
ஷாப்பிங் பயனர் தேடலை மேம்படுத்தவும்: பயனர்கள் முன் பதிவு செய்கிறார்கள், ஆனால் நாங்கள் அவர்களை அவர்களின் காலவரிசைப் பதிவு வரிசையில் மட்டுமே பட்டியலிட வேண்டும் ('வாடிக்கையாளர்களில்' 'signed_up_on' இல் ஒரு குறியீட்டை உருவாக்கவும்) ஆனால் சரியான முழு சரம் 'நகரம்': 'மிலானோ' வாடிக்கையாளர்களுக்கு மட்டுமே வரையறுக்கப்பட்டுள்ளது.
குறிப்பைக் காட்டு
இலக்கு சொத்தில் இது பொதுவாக அறிவிக்கப்படுகிறது; இறுதியில் WHERE city = 'Milano' என்ற மாயச் சொல்லைச் சேர்க்கிறீர்கள்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்