6.1 పరిచయం
ఇప్పుడు సిద్ధాంతం నుండి అభ్యాసానికి వెళ్దాం.
మేము వాస్తవ ప్రపంచంలో జీవిస్తున్నాము మరియు అన్ని సాఫ్ట్వేర్ ఉత్పత్తులు అంతిమంగా జీవించే వ్యక్తుల కోసం సృష్టించబడతాయి. మరియు ఈ జీవించి ఉన్న వ్యక్తులు నెమ్మదిగా లోడ్ చేసే సైట్లు మరియు వేగాన్ని తగ్గించే ప్రోగ్రామ్ల వల్ల చాలా చిరాకు పడుతున్నారు.
మరియు డేటాబేస్ ప్రశ్నకు సెకను కంటే ఎక్కువ సమయం తీసుకుంటే, ఇది ఆమోదయోగ్యం కాదు . వినియోగదారులు చాలా నెమ్మదిగా ఉండే పేజీలు/ఫంక్షనాలిటీని కలిగి ఉన్న ఉత్పత్తిని ఉపయోగించరు.
కానీ తరచుగా, ఒక పేజీని ప్రదర్శించడానికి, మీరు డేటాబేస్కు అనేక డజన్ల ప్రశ్నలను నిర్వహించాలి. మరియు అవి వరుసగా అమలు చేయబడితే, మీరు ఇకపై రెండవ పరిమితిని కలిగి ఉండరు, కానీ ఒక అభ్యర్థనకు 100ms అని చెప్పండి.
ప్రోగ్రామర్లు డేటాబేస్ ప్రశ్నలను వేగవంతం చేసే టాప్ 5 మార్గాలు ఇక్కడ ఉన్నాయి:
- డేటాబేస్లోని పట్టికలకు సూచికలను జోడిస్తోంది.
- ప్రశ్నలను తిరిగి వ్రాయడం మరియు ఆప్టిమైజ్ చేయడం.
- డేటాబేస్ వైపు కాషింగ్ను ప్రారంభించండి (మరియు కాన్ఫిగర్ చేయండి).
- క్లయింట్ వైపు కాషింగ్ని ప్రారంభించండి.
- డేటాబేస్ డీనార్మలైజేషన్ చేయడం.
ఈ విషయాలన్నీ మీకు ఇప్పటికే చాలా వరకు సుపరిచితం, కాబట్టి కిందివి ఆచరణాత్మక సలహా మాత్రమే.
6.2 సూచీలు
డేటాబేస్తో పనిచేయడం దాదాపు ఏ సైట్ యొక్క పనిని ఎక్కువగా తీసుకుంటుందనేది రహస్యం కాదు. మరియు ఇది చాలా తరచుగా వెబ్ అప్లికేషన్లకు అడ్డంకిగా ఉండే డేటాబేస్తో పని చేస్తోంది.
ఈ వ్యాసంలో నేను MySQLని ఉపయోగించడం గురించి ఆచరణాత్మక సలహా ఇవ్వాలనుకుంటున్నాను.
నేను వెంటనే చెబుతాను:
- ఈ కథనం MySQL గురించి వ్రాయబడింది, అయినప్పటికీ సాధారణ విషయాలు ఏదైనా DBMSకి నిజమయ్యే అవకాశం ఉంది.
- వ్యాసంలో వ్రాసిన ప్రతిదీ నా వ్యక్తిగత దృక్కోణం మరియు అంతిమ సత్యం కాదు.
- సలహా కొత్తదిగా నటించదు మరియు సాహిత్యం చదివిన మరియు వ్యక్తిగత అనుభవం యొక్క సాధారణీకరణ ఫలితం.
- ఈ వ్యాసం యొక్క ఫ్రేమ్వర్క్లో, నేను MySQL కాన్ఫిగరేషన్ సమస్యలపై తాకను.
MySQLని ఉపయోగిస్తున్నప్పుడు సమస్యలను క్రింది మూడు సమూహాలుగా విభజించవచ్చు (ప్రాముఖ్యత క్రమంలో):
- ఇండెక్స్లను ఉపయోగించకపోవడం లేదా దుర్వినియోగం చేయడం.
- తప్పు డేటాబేస్ నిర్మాణం.
- తప్పు \ suboptimal SQL ప్రశ్నలు.
ఈ సమూహాలలో ప్రతిదానిని నిశితంగా పరిశీలిద్దాం.
సూచికలను ఉపయోగించడం
ఇండెక్స్లను ఉపయోగించకపోవడం లేదా దుర్వినియోగం చేయడం అనేది చాలా తరచుగా ప్రశ్నలను నెమ్మదిస్తుంది. ఇండెక్స్లు ఎలా పనిచేస్తాయో లేదా దాని గురించి ఇంకా మాన్యువల్లో చదవని వారి కోసం, దానిని చదవమని నేను మీకు గట్టిగా సలహా ఇస్తున్నాను.
సూచికలను ఉపయోగించడం కోసం చిట్కాలు:
- మీరు ప్రతిదీ సూచిక చేయవలసిన అవసరం లేదు . చాలా తరచుగా, అర్థాన్ని అర్థం చేసుకోకుండా, ప్రజలు పట్టికలోని అన్ని ఫీల్డ్లను ఇండెక్స్ చేస్తారు. ఇండెక్స్లు పొందడాన్ని వేగవంతం చేస్తాయి, కానీ అడ్డు వరుస ఇన్సర్ట్లు మరియు అప్డేట్లను నెమ్మదిస్తాయి, కాబట్టి ప్రతి ఇండెక్స్ ఎంపిక అర్థవంతంగా ఉండాలి.
- ఇండెక్స్ని వర్ణించే ప్రధాన పారామితులలో ఒకటి సెలెక్టివిటీ, ఇది ఇండెక్స్లోని విభిన్న మూలకాల సంఖ్య. రెండు లేదా మూడు సాధ్యమైన విలువలను కలిగి ఉన్న ఫీల్డ్ను ఇండెక్స్ చేయడంలో అర్ధమే లేదు. అటువంటి సూచిక నుండి తక్కువ ప్రయోజనం ఉంటుంది.
- ఇచ్చిన పట్టికకు వ్యతిరేకంగా అన్ని ప్రశ్నల విశ్లేషణతో సూచికల ఎంపిక ప్రారంభం కావాలి. చాలా తరచుగా, అటువంటి విశ్లేషణ తర్వాత, మూడు లేదా నాలుగు సూచికలకు బదులుగా, మీరు ఒక మిశ్రమాన్ని తయారు చేయవచ్చు.
- మిశ్రమ సూచికలను ఉపయోగిస్తున్నప్పుడు, సూచికలోని ఫీల్డ్ల క్రమం కీలకం.
- ఇండెక్స్లను కవర్ చేయడం గురించి మర్చిపోవద్దు. ప్రశ్నలోని మొత్తం డేటాను సూచిక నుండి తిరిగి పొందగలిగితే, MySQL నేరుగా పట్టికను యాక్సెస్ చేయదు. అటువంటి అభ్యర్థనలు చాలా త్వరగా అమలు చేయబడతాయి. ఉదాహరణకు,
SELECT name FROM user WHERE login='test'
ఇండెక్స్ (లాగిన్, పేరు)తో కూడిన ప్రశ్న కోసం, పట్టికకు ప్రాప్యత అవసరం లేదు. కొన్నిసార్లు మిశ్రమ సూచికకు అదనపు ఫీల్డ్ను జోడించడం అర్ధమే, ఇది ఇండెక్స్ కవర్ చేస్తుంది మరియు ప్రశ్నలను వేగవంతం చేస్తుంది. - అడ్డు వరుస సూచికల కోసం, తరచుగా వరుసలో కొంత భాగాన్ని మాత్రమే ఇండెక్స్ చేయడం సరిపోతుంది. ఇది సూచిక పరిమాణాన్ని గణనీయంగా తగ్గించగలదు.
%
ఇది ప్రారంభంలో ఉంటే ,LIKE(SELECT * FROM table WHERE field LIKE '%test')
సూచికలు ఉపయోగించబడవు.- FULLTEXT సూచిక MATCH తో మాత్రమే ఉపయోగించబడుతుంది ... సింటాక్స్కు వ్యతిరేకంగా .
6.3 డేటాబేస్ నిర్మాణం
డేటాబేస్తో వేగవంతమైన మరియు సమర్థవంతమైన పనికి చక్కగా రూపొందించబడిన డేటాబేస్ కీలకం. మరోవైపు, పేలవంగా రూపొందించబడిన డేటాబేస్ డెవలపర్లకు ఎల్లప్పుడూ తలనొప్పిగా ఉంటుంది.
డేటాబేస్ డిజైన్ చిట్కాలు:
- సాధ్యమైనంత చిన్న డేటా రకాలను ఉపయోగించండి. డేటా రకం పెద్దది, పెద్ద పట్టిక, డేటాను పొందడానికి ఎక్కువ డిస్క్ యాక్సెస్లు అవసరం. చాలా అనుకూలమైన విధానాన్ని ఉపయోగించండి:
SELECT * FROM table_name PROCEDURE ANALYSE();
కనీస సాధ్యం డేటా రకాలను గుర్తించడానికి. - డిజైన్ దశలో సాధారణ రూపాలను గమనించండి. తరచుగా ప్రోగ్రామర్లు ఈ దశలో ఇప్పటికే డీనార్మలైజేషన్ను ఆశ్రయిస్తారు. అయినప్పటికీ, చాలా సందర్భాలలో, ప్రాజెక్ట్ ప్రారంభంలో, ఇది ఎలా దారితీస్తుందో స్పష్టంగా లేదు. పట్టికను సాధారణీకరించడం అనేది సబ్-అప్టిమల్గా డీనార్మలైజ్ చేయబడిన దానితో బాధపడటం కంటే చాలా సులభం. మరియు
JOIN
కొన్నిసార్లు ఇది తప్పుగా డీనార్మలైజ్ చేయబడిన పట్టికల కంటే వేగంగా పని చేస్తుంది. NULL
మీకు స్పృహతో అవసరమైతే తప్ప నిలువు వరుసలను ఉపయోగించవద్దు .
6.4 SQL ప్రశ్నలు.
స్థానిక SQLలో అన్ని ప్రశ్నలను తిరిగి వ్రాయాలనే కోరిక చాలా తరచుగా ఉంటుంది, తద్వారా ప్రశ్న వీలైనంత వేగంగా ఉంటుంది. మీరు దీన్ని చేయాలని నిర్ణయించుకుంటే, ఇక్కడ కొన్ని చిట్కాలు ఉన్నాయి:
- లూప్లో అభ్యర్థనలను నివారించండి. SQL అనేది సెట్ల భాష, మరియు రైటింగ్ క్వెరీలను ఫంక్షన్ల భాషలో కాకుండా సెట్ల భాషలో సంప్రదించాలి.
*
ప్రశ్నలలో (నక్షత్రాలను) నివారించండి . మీరు ఎంచుకున్న ఫీల్డ్లను ఖచ్చితంగా జాబితా చేయడానికి సంకోచించకండి. ఇది పొందిన మరియు పంపిన డేటా మొత్తాన్ని తగ్గిస్తుంది. అలాగే, ఇండెక్స్లను కవర్ చేయడం గురించి మర్చిపోవద్దు. మీరు పట్టికలోని అన్ని ఫీల్డ్లను ఎంచుకున్నప్పటికీ, వాటిని జాబితా చేయడం ఉత్తమం. మొదట , ఇది కోడ్ యొక్క రీడబిలిటీని మెరుగుపరుస్తుంది. ఆస్టరిస్క్లను ఉపయోగిస్తున్నప్పుడు, పట్టికలో ఏ ఫీల్డ్లు ఉన్నాయో దాన్ని చూడకుండా కనుగొనడం అసాధ్యం. రెండవది , ఈ రోజు మీ టేబుల్కి ఐదు INT నిలువు వరుసలు ఉన్నాయి మరియు ఒక నెల తర్వాత మరో TEXT మరియు BLOB జోడించబడ్డాయి మరియు నక్షత్రం అలాగే ఉంది.- పేజినేట్ చేసినప్పుడు, మొత్తం రికార్డ్ల సంఖ్యను పొందడానికి, ఉపయోగించండి
SQL_CALC_FOUND_ROWS
మరియుSELECT FOUND_ROWS();
ఉపయోగించినప్పుడుSQL_CALC_FOUND_ROWS MySQL
, ఎంచుకున్న అడ్డు వరుసల సంఖ్యను కాష్ చేస్తుంది (LIMIT వర్తింపజేయడానికి ముందు), మరియు ఉపయోగించినప్పుడు,SELECT FOUND_ROWS()
ప్రశ్నను మళ్లీ అమలు చేయకుండానే ఈ కాష్ చేసిన విలువను మాత్రమే అందిస్తుంది. INSERT
బహుళ ఇన్సర్ట్ల కోసం వాక్యనిర్మాణం ఉందని మర్చిపోవద్దు . ఒక ప్రశ్న లూప్లోని బహుళ ప్రశ్నల కంటే వేగంగా మాగ్నిట్యూడ్ క్రమాన్ని అమలు చేస్తుంది.LIMIT
మీకు మొత్తం డేటా అవసరం లేని చోట ఉపయోగించండి .INSERT… ON DUPLICATE KEY UPDATE…
స్థానంలో మరియుINSERT
ఎంపికUPDATE
తర్వాత, మరియు తరచుగా స్థానంలో ఉపయోగించండిREPLACE
.- ఈ అద్భుతమైన లక్షణాన్ని మర్చిపోవద్దు
GROUP_CONCAT
. ఇది క్లిష్టమైన ప్రశ్నలకు సహాయం చేస్తుంది.
GO TO FULL VERSION