మాడ్యూల్ పాఠాలు (1/4)
సూచికలు మరియు బి-ట్రీలు
డేటాబేస్ ఒక సెకను భిన్నాలలో మిలియన్ల వరుసల మధ్య ఒకే రికార్డును ఎలా కనుగొనగలదు?
డిఫాల్ట్గా, మేము SELECT * FROM customers WHERE city = 'Milano'ని అడిగినప్పుడు, Postgres సీక్వెన్షియల్ స్కాన్ని నిర్వహించాలి: ఇది భౌతికంగా మొత్తం పట్టికను డిస్క్ నుండి వరుసల వారీగా చదువుతుంది, ప్రతి నగరాన్ని "మిలానో"తో పోలుస్తుంది. ఒక పట్టిక మిలియన్ల కొద్దీ రికార్డులను కలిగి ఉన్నప్పుడు, ఈ ప్రక్రియ పనితీరును బలహీనపరుస్తుంది.
ఈ అడ్డంకులకు ప్రధాన నిర్మాణాత్మక సమాధానం సూచికలు.
సూచికలు (బి-ట్రీలు)
సూచికలు పెద్ద పుస్తకం వెనుక ఉన్న విశ్లేషణాత్మక సూచిక వలె పని చేస్తాయి. "మిలానో" గురించి ఎక్కడ మాట్లాడుతుందో తెలుసుకోవడానికి మొత్తం పుస్తకాన్ని చదవడానికి బదులుగా, "మిలానో" పదం మమ్మల్ని [p. 45, 114, 230]కి దారి మళ్లించే వెనుక పేజీలను చూస్తాము.
డేటాబేస్లు, తెరవెనుక, ఈ ప్రత్యేక, చాలా కాంపాక్ట్ డేటా స్ట్రక్చర్ను (తరచుగా "B-ట్రీ") నిర్మిస్తాయి, సందేహాస్పద నిలువు వరుసల ద్వారా ఆర్డర్ చేయబడి, సరిపోలే అడ్డు వరుసల భౌతిక నిల్వకు ప్రత్యక్ష పాయింటర్లను కలిగి ఉంటుంది.
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);ఈ ఒక్క ఆపరేషన్ Postgres ఇంజిన్ను ట్రిగ్గర్ చేస్తుంది, ఇది నేపథ్యంలో అన్ని city విలువలను సంగ్రహిస్తుంది మరియు సూచిక చేస్తుంది. పూర్తయిన తర్వాత, ప్రతి తదుపరి SELECT ... WHERE city = '...' ఎగురుతుంది!
ప్రాథమిక కీలు మరియు ప్రత్యేకత
ప్రాథమిక కీ (PRIMARY KEY) మరియు UNIQUE కీలక నియమాలు హుడ్ కింద సూచికలను రహస్యంగా ఉపయోగిస్తాయని మీకు తెలుసా? అడ్డు వరుసలను చొప్పించేటప్పుడు లేదా మార్చేటప్పుడు ఇమెయిల్ లేదా ID ఎప్పుడూ నకిలీ చేయబడదని DB నిర్ధారించుకోవాలి కాబట్టి, PostgreSQL స్వయంచాలకంగా వాటి పైన ఒక అవ్యక్త B-ట్రీ సూచికను సృష్టిస్తుంది: ఈ విధంగా ప్రత్యేకత తనిఖీలు మైక్రోసెకన్లు తీసుకుంటాయి.
అందుకే ID ఫీల్డ్లో చేరినవి అద్భుతమైన పనితీరును కలిగి ఉన్నాయి.
సూచికను వదలడం
భారీ ప్రశ్నలు మారాయని మరియు ఇండెక్స్ను ఎప్పుడూ సంప్రదించలేదని మీరు గుర్తిస్తే, దానిని నాశనం చేసి, ముఖ్యమైన స్థలాన్ని తిరిగి పొందడం తెలివైన పని:
DROP INDEX idx_customers_city;మీ వంతు
మా ఇ-కామర్స్లో మేము చాలా తరచుగా కస్టమర్లను జాతీయత (కస్టమర్లలోని దేశం కాలమ్) ద్వారా ఫిల్టర్ చేయడాన్ని డాష్బోర్డ్ల ద్వారా గమనిస్తాము. \nదేశం కాలమ్పై కొత్త బేస్ ఇండెక్స్ని సృష్టించండి మరియు దానికి 'idx_customers_country' అని పేరు పెట్టండి.
సూచనను చూపించు
పట్టిక_పేరు(నిలువు_పేరు)పై క్రియేట్ ఇండెక్స్ సూచిక_పేరుని ఉపయోగించండి;
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
ద్వితీయ ప్రత్యేక సూచికలను అన్వేషించడం
తార్కిక ఉద్దేశాన్ని స్పష్టంగా మరియు అమలు చేస్తున్నప్పుడు, సృష్టి సమయంలో ప్రత్యేకమైన పరిమితిని అనుకరించడానికి మరియు శోధనలను వేగవంతం చేయడానికి కూడా B-ట్రీ సూచిక ఉపయోగించబడుతుంది.\n\nమీరు ప్రత్యేక కీవర్డ్ని ప్రకటించే కొత్త సూచికను సృష్టించండి. దీన్ని నిర్వచించండి, తద్వారా ఇది ఇతర వినియోగదారుల నుండి ఏవైనా అవాంఛిత డూప్లికేట్ సైన్-అప్లను బ్లాక్ చేస్తుంది, 'కస్టమర్ల' యొక్క 'ఇమెయిల్' కాలమ్పై ప్రత్యేకతను బలవంతం చేస్తుంది మరియు దానికి 'idx_unique_email_customer' అని పేరు పెట్టండి.
సూచనను చూపించు
క్రియేట్ యూనిక్ ఇండెక్స్ ఇండెక్స్_పేరును టేబుల్పై వ్రాయండి(కాలమ్);
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది