ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 10 · 4లో పాఠం 3కోర్సులో 39/57~12 min
మాడ్యూల్ పాఠాలు (3/4)

మిశ్రమ మరియు పాక్షిక సూచికలు

మునుపటి పాఠాలలో మేము సరళ DBMS ప్రశ్నల కోసం సూచికలను ఉపయోగించి కవర్ చేసాము (WHERE country = 'Italy'). మనం రెండు కంబైన్డ్ ఫ్రంట్‌లలో శోధించినప్పుడు దాని గురించి ఏమిటి?

ఉదాహరణకు, నిజమైన ఇ-కామర్స్‌లో మేము నిర్దిష్ట కస్టమర్ ID మరియుకి చెందిన ఆర్డర్‌లను నిర్ణీత సమయ పరిధిలో కనుగొనాలనుకోవచ్చు: WHERE customer_id = 90 AND placed_at >= '2025-01-01'.

మీరు customer_idలో బేస్ ఇండెక్స్‌ను మాత్రమే కలిగి ఉన్నట్లయితే, బైనరీ ట్రీని ఉపయోగించి కస్టమర్ యొక్క 50 ఆర్డర్‌లను పోస్ట్‌గ్రెస్ ఏ సమయంలోనైనా కనుగొంటుంది, అయితే అది 50 వాటిని మాన్యువల్‌గా మరియు సీక్వెన్షియల్‌గా, సోమరిగా కంటి ద్వారా తేదీలను ఫిల్టర్ చేయాలి.

మిశ్రమ సూచికలు

"విశ్లేషణాత్మక నిఘంటువు" ఫైల్‌లను ఒకే కీ డైమెన్షన్‌తో పాటు కాకుండా అనేకం పాటు ఆర్డర్ చేయమని మేము DBMSకి చెప్పగలం.

SQL
CREATE INDEX idx_orders_customer_date ON orders(customer_id, placed_at);

"సమ్మిళిత" సూచిక దాని పారామితుల క్రమాన్ని చాలా ముఖ్యమైనదిగా పరిగణిస్తుంది: ఇక్కడ B-ట్రీ నోడ్‌ల సమూహం మరియు ఒక బ్లాక్‌లో customer_idని కఠినంగా వర్గీకరిస్తుంది (విభజన కోసం అత్యంత వివక్షత కలిగినది); వాటి లోపల ఉప-వృక్షం వివిధ placed_at సమయ విలువలతో సంపూర్ణంగా క్రమబద్ధీకరించబడిన క్రమంలో నివసిస్తుంది.

ఈ నిర్మాణం బహుళ సమూహ అంచనాలతో WHERE నిబంధనలను క్రూరంగా నాశనం చేస్తుంది.

పాక్షిక సూచికలు (ఫిల్టర్ చేయబడిన సూచికలు)

ప్రతి ఇండెక్స్ వినియోగదారు-ఇన్‌పుట్ స్ట్రీమ్‌లలో డిస్క్ స్థలం మరియు CPU ఖర్చు అవుతుంది. ఇ-కామర్స్‌కు ఫిల్టర్‌ను నిరంతరం క్రమబద్ధీకరించడం మరియు తిరిగి పొందడం అవసరం అయితే, మైనారిటీ రికార్డుల కోసం మాత్రమే ఏమి చేయాలి? (ఉదాహరణకు: చదవని-నోటిఫికేషన్‌ల తనిఖీని వేగంగా పోల్ చేయడం.) మొత్తం 10,000,000 నోటిఫికేషన్‌లలో "ఇస్_రీడ్" ఇండెక్స్‌ని సృష్టించడం, "చదవనిది" వాటిలో 5ని మాత్రమే సూచిస్తే చాలా శ్రమతో కూడుకున్నది.

SQL
CREATE INDEX idx_unread_notifs ON notifications(user_id)
  WHERE is_read = false; -- Questa aggiuntiva è l'"Indice Parziale"

డేటాబేస్ మెరుపు-వేగవంతమైన B-ట్రీని నిర్మిస్తుంది, ఇది రికార్డ్ చదవని పక్షంలో DB మాత్రమేకి త్వరిత యాక్సెస్ కీలను నిల్వ చేస్తుంది! డిస్క్ 10 మిలియన్లకు బదులుగా 5 వరుసల (3 బైట్‌లు) ఇండెక్స్‌తో ప్రేమలో పడుతుంది. వేగవంతమైన ఎంపికలు పూర్తిగా ప్రయోజనం పొందుతాయి:

SELECT * FROM notifications WHERE user_id = 2 AND is_read = false;

మీ వంతు

వ్యాయామం#sql.m10.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

మేము తాత్కాలిక పాస్‌వర్డ్‌లు / రీసెట్ టోకెన్‌ల శోధనను ఆప్టిమైజ్ చేయాలనుకుంటున్నాము. తెలిసిన నగరంతో కలిపి నిర్దిష్ట దేశం నుండి సైన్ అప్ చేసిన కస్టమర్‌లందరి కోసం మేము చాలా తరచుగా SELECT కాల్‌లు చేస్తాము.\n'కస్టమర్‌లు'పై 'idx_cust_loc' పేరుతో మిశ్రమ సూచికను సృష్టించండి. ముందుగా 'దేశం' ఫీల్డ్‌ను (ఇది మరింత ప్రత్యేకమైనది) ఆపై 'నగరం' ఫీల్డ్‌ను దాటండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

సింటాక్స్: టేబుల్‌పై ఇండెక్స్ పేరును సృష్టించండి(col1, col2);

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

షరతులతో కూడిన (పాక్షిక) సూచికలను అన్వేషించడం

వ్యాయామం#sql.m10.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

షాపింగ్ యూజర్ లుకప్‌ను ఆప్టిమైజ్ చేయండి: వినియోగదారులు ముందస్తుగా నమోదు చేసుకుంటారు, కానీ మేము వారి కాలక్రమానుసారం సైన్అప్ ఆర్డర్‌లో మాత్రమే జాబితా చేయాలి ('కస్టమర్‌లు'లో 'signed_up_on'లో ఇండెక్స్‌ని సృష్టించండి) కానీ ఖచ్చితమైన పూర్తి-స్ట్రింగ్ 'సిటీ' నుండి కస్టమర్‌లకు మాత్రమే పరిమితం చేయబడింది: 'మిలానో'.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

లక్ష్య ఆస్తిపై ఇది సాధారణంగా ప్రకటించబడుతుంది; చివర్లో మీరు WHERE city = 'Milano' అనే మ్యాజిక్ కీవర్డ్‌ని జతచేస్తారు.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది