7.1 సూచికలు కనిపించడానికి కారణాలు

డేటాబేస్‌లు లేకుండా మరొక ముఖ్యమైన విషయం సూచికలు.

వినియోగదారు పట్టికలో 10 మిలియన్ల మంది వినియోగదారులు ఉన్న పరిస్థితిని ఊహించండి మరియు మీరు 90 కంటే ఎక్కువ స్థాయిని కలిగి ఉన్న ప్రతి ఒక్కరినీ ప్రదర్శించాలనుకుంటున్నారు. ఈ ప్రశ్న వ్రాయడం చాలా సులభం:

SELECT * FROM user WHERE level > 90

బాగుంది, మేము ఒక నిమిషం లోపు అభ్యర్థనను వ్రాసాము. మరియు SQL సర్వర్ నుండి ఈ ప్రశ్నను అమలు చేయడానికి ఎంత సమయం పడుతుంది? అటువంటి ప్రశ్నను అమలు చేయడానికి, అతను 10 మిలియన్ల రికార్డుల ద్వారా వెళ్ళవలసి ఉంటుంది మరియు ఒకే ఒక్క రికార్డ్ ఉన్నప్పటికీ, దీనికి చాలా సమయం పడుతుంది.

జావాలో ఇలాంటి పనిని ఎలా చేస్తాం? మేము మొదట వినియోగదారుల సేకరణను స్థాయిని బట్టి క్రమబద్ధీకరిస్తాము, ఆపై బైనరీ శోధనను ఉపయోగించి అవసరమైన రికార్డులను మేము చాలా త్వరగా కనుగొనగలము. అది ఏమిటో నేను వివరించాల్సిన అవసరం లేదని నేను ఆశిస్తున్నాను?

చాలా బాగుంది, అయితే 2020కి ముందు రిజిస్ట్రేషన్ తేదీ ఉన్న వినియోగదారులను మనం ఇప్పుడు ఎంచుకోవాల్సి వస్తే? రిజిస్ట్రేషన్ తేదీ ద్వారా మళ్లీ క్రమబద్ధీకరించండి మరియు బైనరీ శోధనను ఉపయోగించండి.

అవును, మనం ఏదో ఒక ఫీల్డ్‌లో ఫిల్టర్‌ని నిర్వహిస్తే, ఒకసారి కాదు, తరచుగా, ఈ ఫీల్డ్ ద్వారా క్రమబద్ధీకరించబడిన డేటాను నిల్వ చేయడం చాలా ఉపయోగకరంగా ఉంటుంది.

మరియు వివిధ ఫీల్డ్‌ల ద్వారా ఏకకాలంలో క్రమబద్ధీకరించబడిన డేటాను ఎలా నిల్వ చేయాలి?

మరియు సమాధానం చాలా సులభం - మీరు డేటాను కాదు, వాటి సూచికలను కొన్ని ప్రపంచ పట్టికలో నిల్వ చేయాలి.

idతో 10 మంది వినియోగదారులు ఉన్నారని అనుకుందాం: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

మరియు మీరు వాటిని స్థాయి ద్వారా క్రమబద్ధీకరించాలని నిర్ణయించుకుంటారు, అప్పుడు వారి id యొక్క శ్రేణి ఇలా ఉంటుంది, ఉదాహరణకు, ఇలా ఉంటుంది: {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}.

మరియు మేము వాటిని తేదీ ప్రకారం క్రమబద్ధీకరించినట్లయితే, అప్పుడు మనకు లభిస్తుంది, ఉదాహరణకు: {10, 1, 8, 7, 2, 3, 5, 9, 6}.

ఈ id యొక్క శ్రేణులను సూచికలు అంటారు . మూలకాలు పెద్దవి, మేము వాటిని తాకము. జావాలో, మేము వస్తువులను తాకము, కానీ వాటి సూచనలను నిల్వ చేస్తాము; SQLలో, మేము నిజమైన తీగలను తాకము, కానీ వాటి సంఖ్యలను నిల్వ చేస్తాము.

నేను దీనిని జావా కోడ్‌లో తిరిగి వ్రాస్తాను:

List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y");  //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically

List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length

సేకరణలను క్రమబద్ధీకరించడం అంటే వాస్తవ మూలకాలను తరలించడం కాదు. సేకరణ నిజమైన వస్తువులను నిల్వ చేయదు, కానీ వాటికి లింక్‌లు. SQL పట్టికలకు కూడా ఇది వర్తిస్తుంది. నిజమైన పంక్తులు తమలో తాము అబద్ధం మరియు అబద్ధం చెబుతాయి.

మరియు మేము తరచుగా ఏదైనా ఫీల్డ్ కోసం ఎంపికలు చేయవలసి వచ్చినప్పుడు, మేము పట్టికకు మరొక సూచికను (జావాలోని కొత్త సేకరణకు సారూప్యంగా) జోడిస్తాము మరియు పట్టిక యొక్క వరుసలను క్రమబద్ధీకరిస్తాము, వాటి క్రమబద్ధీకరించబడిన క్రమాన్ని ప్రత్యేక ఇండెక్స్ ఫైల్‌లో నిల్వ చేస్తాము.

జావా పోలిక కొద్దిగా సహాయపడిందని నేను ఆశిస్తున్నాను. కొంచెం అభ్యాసం - మరియు మీ కోసం, సూచికల ఉపయోగం కూడా అత్యంత స్పష్టమైన పరిష్కారం అవుతుంది.

7.2 పట్టికకు సూచికలను జోడించడం

పట్టికను సృష్టించేటప్పుడు సూచికను వెంటనే పేర్కొనవచ్చు లేదా తర్వాత జోడించవచ్చు. చాలా తరచుగా, ఇది రెండవ దృష్టాంతంలో సంభవిస్తుంది - పట్టిక పరిమాణం పెరుగుతుంది మరియు డేటా నమూనా మందగించినందున సూచికలు జోడించబడతాయి.

పట్టికకు సూచికను జోడించడం చాలా సులభం:

ALTER TABLE table
    ADD INDEX index_name (column);

మీరు ఒకే సమయంలో బహుళ నిలువు వరుసలలో తరచుగా రికార్డులను చూస్తున్నట్లయితే, మీరు మిశ్రమ సూచికను పేర్కొనవచ్చు: SQL దానిని కంపోజ్ చేయడానికి బహుళ నిలువు వరుసలను ఉపయోగిస్తుంది.

పట్టికకు మిశ్రమ సూచికను జోడించడం కూడా చాలా సులభం:

ALTER TABLE table
    ADD INDEX index_name (column 1, column 2, column 3, ...);

ఇండెక్స్‌లు చాలా డిస్క్ స్థలాన్ని తీసుకుంటాయి, కాబట్టి మీకు ఇండెక్స్ అవసరం లేకుంటే, మీరు దీన్ని ఎప్పుడైనా తీసివేయవచ్చు:

ALTER TABLE table
    DROP INDEX index_name;

సూచికలు డేటాబేస్లో కాకుండా దాచిన భాగం. అవి ఏ విధంగానూ ప్రశ్నలను వ్రాసే ఆకృతిని ప్రభావితం చేయవు. వారి ఉనికి డేటా నమూనాను వేగవంతం చేస్తుంది మరియు వాటి జోడింపు మరియు బ్యాకప్‌ను నెమ్మదిస్తుంది.

కానీ నేటి ప్రపంచంలో వేగం ఎంత ముఖ్యమైనది మరియు డిస్క్ స్థలం ఎంత చౌకగా ఉందో పరిశీలిస్తే, అన్ని సందర్భాలలో సూచికలను జోడించడానికి సంకోచించకండి. నన్ను క్షమించండి నిర్వాహకులు...