Back to Question Center
0

వేగంగా సైట్లకు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలా త్వరిత సైట్లు కోసం SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలా Related Topics: డీబగ్గింగ్ & Semalt

1 answers:
వేగంగా సైట్లు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలా

ఈ వ్యాసం మొదట డెలిసియెంట్ సెమాల్ట్ బ్లాగ్లో ప్రచురించబడింది మరియు ఇక్కడ అనుమతితో పునఃప్రచురణ చేయబడింది.

మీకు ఒక ఫాస్ట్ సైట్ == సంతోషకరమైన యూజర్లు, గూగుల్ నుండి మెరుగైన ర్యాంకింగ్ మరియు పెరిగిన మార్పిడుల గురించి తెలుసు. బహుశా మీరు కూడా మీ సెమాల్ట్ సైట్ ఎంత వేగంగా ఉంటుందో అనుకోవచ్చు: సర్వర్ను ఏర్పాటు చేయడం యొక్క ఉత్తమ సాధనల నుండి, నెమ్మదిగా కోడ్ను పరిష్కరించడంలో మరియు మీ చిత్రాలను CDN కి ఆఫ్లోడ్ చేయడం కోసం మీరు సైట్ పనితీరును చూసారు, కానీ ప్రతిదీ ?

సెమాల్ట్ వంటి డైనమిక్, డేటాబేస్ ఆధారిత వెబ్సైట్లతో, మీరు ఇప్పటికీ మీ చేతుల్లో ఒక సమస్య ఉండవచ్చు: డేటాబేస్ ప్రశ్నలు మీ సైట్ను నెమ్మదిగా తగ్గిస్తాయి.

ఈ పోస్ట్ లో, Semalt విషయాలను వేగవంతం చేయడానికి శీఘ్ర పరిష్కారాలు మరియు ఇతర విధానాలు పాటు సమస్యలను అర్థం ఎలా, అడ్డంకులు కలిగించే ప్రశ్నలు గుర్తించడానికి ఎలా ద్వారా మీరు పడుతుంది. సెమాల్ట్ మేము ఇటీవల డబ్బులు తింటారు ఒక వాస్తవ ప్రశ్న ఉపయోగించి రుచికరమైన బ్రౌన్స్ యొక్క కస్టమర్ పోర్టల్ విషయాలు డౌన్ మందగిస్తాయి - navy blue chiffon dress uk. com.

గుర్తింపు

నెమ్మదిగా SQL ప్రశ్నలు ఫిక్సింగ్ లో మొదటి దశ వాటిని గుర్తించడం. యాష్లే ముందు డీబగ్గింగ్ ప్లగ్ఇన్ ప్రశ్న మానిటర్ కీర్తి పాడారు, మరియు అది నిజంగా నెమ్మదిగా SQL ప్రశ్నలు గుర్తించడం కోసం ఒక అమూల్యమైన సాధనం చేస్తుంది ప్లగ్ఇన్ యొక్క డేటాబేస్ ప్రశ్నలు ఫీచర్. పేజీ అభ్యర్థన సమయంలో అమలు చేయబడిన అన్ని డేటాబేస్ ప్రశ్నలపై ప్లగ్ఇన్ నివేదికలు. ఇది మీరు వాటిని కాల్ కోడ్ లేదా భాగం (ప్లగ్ఇన్, థీమ్ లేదా Semalt కోర్) వాటిని ఫిల్టర్ అనుమతిస్తుంది, మరియు హైలైట్ నకిలీ మరియు నెమ్మదిగా ప్రశ్నలు:

వేగంగా సైట్లకు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలావేగంగా సైట్ల కోసం SQL ప్రశ్నలు ఆప్టిమైజ్ చేయడానికి ఎలా Topics:
డీబగ్గింగ్ & సెమాల్ట్

మీరు ఉత్పత్తి డీబగ్గింగ్ ప్లాట్ఫారమ్పై ఒక డీబగ్గింగ్ ప్లగిన్ను ఇన్స్టాల్ చేయకూడదనుకుంటే (బహుశా మీరు కొన్ని పనితీరు భారాన్ని జోడించడం గురించి ఆందోళన చెందుతున్నారు) మీరు MySQL స్లో సెమాల్ట్ లాగ్ ఆన్ చేయడాన్ని ఎంచుకోవచ్చు, ఇది అన్ని ప్రశ్నలను లాగ్స్ చేస్తుంది అమలు చేయడానికి సమయం మొత్తం. ప్రశ్నలను లాగ్ ఇన్ ఎక్కడ కన్ఫిగర్ చేయడం మరియు సెట్ చేయడం చాలా సులభం. ఈ సర్వర్ స్థాయి సర్దుబాటు వంటి, పనితీరు హిట్ తక్కువగా ఉంటుంది సైట్లో డీబగ్గింగ్ ప్లగిన్, కానీ అది ఉపయోగించకుండా ఉన్నప్పుడు ఆఫ్ చెయ్యాలి.

అండర్స్టాండింగ్

మీరు మెరుగుపర్చదలచిన ఒక ఖరీదైన ప్రశ్నను కనుగొన్న తర్వాత, తరువాతి దశ ఏమి ప్రశ్న నెమ్మదిగా ఉందో అర్థం చేసుకోవడానికి ప్రయత్నించాలి. మా సైట్ అభివృద్ధి సమయంలో సెమాల్ట్, అమలు చేయడానికి సుమారు 8 సెకన్లు తీసుకుంటున్న ఒక ప్రశ్న కనుగొనబడింది!

     SELECTl. KEY_ID,l. ఆర్డర్ గుర్తింపు సంఖ్యా,l. activation_email,l. , licence_keyl. software_product_id,l. software_version,l. , activations_limitl. రూపొందించినవారు,l. renewal_type,l. renewal_id,l. , exempt_domainలు. next_payment_date,లు. స్థితి,pm2. post_id AS 'product_id',pm. meta_value AS 'user_id'నుండిoiz6q8a_woocommerce_software_licences lINNER JOINoiz6q8a_woocommerce_software_subscriptions s ఆన్ లు. key_id = l. KEY_IDINNER JOINoiz6q8a_posts p ఆన్ p. ID = l. ఆర్డర్ గుర్తింపు సంఖ్యాINNER JOINoiz6q8a_postmeta pm pm. post_id = p. IDమరియు pm. meta_key = '_customer_user'INNER JOINoiz6q8a_postmeta pm2 pm2. meta_key = '_software_product_id'మరియు pm2. meta_value = l. software_product_idఎక్కడp. post_type = 'shop_order'మరియు pm. meta_value = 279ఆర్డర్ BY లు. next_payment_date    

మేము WooCommerce మరియు మా ప్లగిన్లు స్టోర్ అమలు WooCommerce సాఫ్ట్వేర్ చందాలు ప్లగిన్ అనుకూలీకరించిన వెర్షన్ ఉపయోగించండి. ఈ ప్రశ్న యొక్క ఉద్దేశ్యం వినియోగదారుల సంఖ్యను తెలుసుకునే అన్ని కస్టమర్లు కోసం చందాలను పొందడమే. సాఫ్ట్వేర్ సబ్స్క్రిప్షన్ ప్లగిన్చే సృష్టించబడిన అనుకూల పట్టికలకు కలుపుతుంది. ప్రశ్న మరింత అర్థం చేసుకోవడానికి లో డైవ్ చేద్దాం.

MySQL మీ ఫ్రెండ్

MySQL కలిగి ఉన్న ఒక సులభ ప్రకటన DESCRIBE ను కలిగి ఉంటుంది, ఇది దాని నిలువు, డేటా రకాలు, అప్రమేయం వంటి పట్టిక యొక్క నిర్మాణం గురించి అవుట్పుట్ సమాచారాన్ని ఉపయోగించవచ్చు. మీరు DESCRIBE wp_postmeta అమలు చేస్తే; మీరు క్రింది ఫలితాలను చూస్తారు:

ఫీల్డ్ టైప్ నల్ కీ డిఫాల్ట్ అదనపు
meta_id పెద్దది
సంతకం
లేదు PRI నల్ auto_increment
post_id పెద్దది
సంతకం
లేదు MUL 0
meta_key వర్చార్ (255) అవును MUL నల్
meta_value దీర్ఘకాలం అవును నల్

అది బాగుంది, కానీ మీరు దాని గురించి ఇప్పటికే తెలుసుకోవచ్చు. SELECT , INSERT , UPDATE , రీప్లిస్ DESCRIBE ప్రకటన పూర్వపదం ఉపయోగించబడుతుందని మీకు తెలుసా? ) మరియు తొలగింపు ప్రకటనలు? దీని పర్యాయపదంగా EXPLAIN ద్వారా దీనిని సాధారణంగా పిలుస్తారు మరియు ప్రకటన ఎలా అమలు చేయబడుతుందనేది గురించి మాకు వివరణాత్మక సమాచారాన్ని అందిస్తుంది.

మా నెమ్మదిగా ప్రశ్న కోసం ఫలితాలు ఇక్కడ ఉన్నాయి:

ఐడి select_type టేబుల్ రకం సాధ్యం_కీలు కీ కీ_లేన్ ref వరుసలు అదనపు
1 SIMPLE pm2 ref meta_key meta_key 576 కేసు 28 ఉపయోగించడం పేరు; తాత్కాలికంగా ఉపయోగించడం; ఫైర్సోర్ట్ ఉపయోగించి
1 SIMPLE pm ref post_id, meta_key meta_key 576 కేసు 37456 ఎక్కడ ఉపయోగిస్తున్నారు
1 SIMPLE పే eq_ref PRIMARY, type_status_date ప్రాథమిక 8 రుచికరమైన బ్రెయిన్స్దేవ్. pm. post_id 1 ఎక్కడ ఉపయోగిస్తున్నారు
1 SIMPLE l ref PRIMARY, order_id order_id 8 రుచికరమైన బ్రెయిన్స్దేవ్. pm. post_id 1 సూచిక పరిస్థితి ఉపయోగించడం; ఎక్కడ ఉపయోగించాలో
1 SIMPLE లు eq_ref ప్రాథమిక ప్రాథమిక 8 రుచికరమైన బ్రెయిన్స్దేవ్. l. key_id 1 నల్

మొదటి చూపులో, ఇది అర్థం చేసుకోవడమే చాలా సులభం కాదు. అదృష్టవశాత్తూ Semalt వద్ద చేసినవారు ప్రకటనను అర్థం చేసుకునేందుకు సమగ్ర మార్గదర్శిని చేశారు.

అతి ముఖ్యమైన కాలమ్ రకం , ఇది పట్టికలు ఎలా చేరాయో వివరిస్తుంది. మీరు ALL చూస్తే, MySQL డిస్క్ నుండి మొత్తం పట్టికను చదవడం, I / O రేట్లను పెంచడం మరియు CPU ని లోడ్ చేయడం. ఇది "ఫుల్ టేబుల్ స్కాన్" (మరింత తర్వాత) అని తెలుస్తుంది.

వరుసలు నిలువు కూడా MySQL ఏమి చేయాలో అనేదానికి ఒక మంచి సంకేతం, ఫలితంగా దాని ఫలితాలను కనుగొన్న ఎన్ని వరుసలను ఇది చూపిస్తుంది.

వివరించండి కూడా మేము ఆప్టిమైజ్ చేయడానికి ఉపయోగించవచ్చు మరింత సమాచారం ఇస్తుంది. ఉదాహరణకు, pm2 పట్టిక (wp_postmeta), అది మనకు చెప్తున్నాము ఫైర్సోర్ట్ ను వాడడము, ఎందుకంటే మేము ఈ ప్రకటనపై ఒక ఆర్డర్ BY నిబంధనను ఉపయోగించి క్రమబద్ధీకరించవలసిన ఫలితాలను అడుగుతున్నాము. మేము ప్రశ్నని కూడా సమీకరించి ఉంటే, మేము అమలులోకి భారాన్ని చేస్తాము. MySQL 5. 6 మరియు పైన ఉన్న డేటాబేస్ల కోసం, EXPLAIN ఫలితాలను JSON వలె అవుట్పుట్ చేయవచ్చు మరియు MySQL Workbench ఆ JSON ను ప్రకటన యొక్క దృశ్య అమలుకు ప్రణాళికగా మారుస్తుంది:

వేగంగా సైట్లకు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలావేగంగా సైట్ల కోసం SQL ప్రశ్నలు ఆప్టిమైజ్ చేయడానికి ఎలా Topics:
డీబగ్గింగ్ & సెమాల్ట్

ధరల ద్వారా ప్రశ్నలను భాగాలుగా చిత్రీకరించడం ద్వారా ఇది మీ దృష్టిని స్వయంచాలకంగా మీ దృష్టికి ఆకర్షిస్తుంది. wp_woocommerce_software_licences (అలియాస్ l) టేబుల్కు ఒక సమస్య ఉంది.

సాల్వింగ్

ప్రశ్న యొక్క ఆ భాగం పూర్తి టేబుల్ స్కాన్ను నిర్వహిస్తుంది, ఇది మీరు తప్పించుకోవటానికి ప్రయత్నించాలి, ఇది ఒక ఇండెక్స్డ్ కాలమ్ ఆర్డర్_ఐడ్ wp_woocommerce_software_licences పట్టికలో చేరినప్పుడు wp_posts పట్టికకు. నెమ్మదిగా ప్రశ్నలకు ఇది సాధారణ సమస్య మరియు సులభంగా పరిష్కారమవుతుంది.

ఇండెక్స్లు

order_id అనేది పట్టికలో డేటాను గుర్తించడం యొక్క ఒక చక్కని ముఖ్యమైన భాగం, మరియు మేము ఇలా ప్రశ్నించినట్లయితే మనం నిజంగా కాలమ్లో ఇండెక్స్ ఉండాలి, లేకపోతే MySQL వాచ్యంగా పట్టిక ప్రతి వరుసను స్కాన్ చేస్తుంది ఇది అవసరమైన వరుసలను కనుగొంటుంది. యొక్క ఒక ఇండెక్స్ జోడించడానికి మరియు ఆ ఏమి చూద్దాం:

     wp_woocommerce_software_licences (order_id) లో INDEX order_id సృష్టించు    

వేగంగా సైట్లకు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలావేగంగా సైట్ల కోసం SQL ప్రశ్నలు ఆప్టిమైజ్ చేయడానికి ఎలా Topics:
డీబగ్గింగ్ & సెమాల్ట్

వావ్, మేము ఇండెక్స్, మంచి ఉద్యోగం జోడించడం ద్వారా ప్రశ్నకు 5 సెకన్లపాటు క్షౌరము చేయగలిగాము!

మీ ప్రశ్న తెలుసుకోండి

ప్రశ్నను Semalt - చేరడం ద్వారా చేరండి, subquery ద్వారా subquery. ఇది అవసరం లేదు విషయాలు లేదు? అనుకూలతలు చేయవచ్చా?

ఈ సందర్భంలో, order_id ను ఉపయోగించి పోస్ట్స్ టేబుల్కు లైసెన్స్ పట్టికలో చేరండి, అన్నింటిని షాప్ రీడర్ పోస్ట్ చేయడానికి ప్రకటనని పరిమితం చేస్తుంది. మేము సరైన ఆర్డర్ రికార్డులను మాత్రమే ఉపయోగిస్తున్నారని నిర్ధారించడానికి డేటా సమగ్రతను అమలు చేయడం. ఏది ఏమయినప్పటికీ, అది ప్రశ్న యొక్క పునరావృత భాగం. మేము ఇది PHP ప్లగ్ఇన్ కోడ్ లో అమలు చేయబడినది, పట్టికలో ఒక సాఫ్ట్వేర్ లైసెన్స్ వరుస ఒక order_id , పోస్ట్లు పట్టికలో WooCommerce ఆర్డర్ సంబంధించిన ఒక సురక్షితమైన పందెం అని తెలుసు. చేరడానికి తీసివేయండి మరియు అది మెరుగుపరుస్తుంది ఉంటే చూద్దాం:

వేగంగా సైట్లకు SQL ప్రశ్నలు ఆప్టిమైజ్ ఎలావేగంగా సైట్ల కోసం SQL ప్రశ్నలు ఆప్టిమైజ్ చేయడానికి ఎలా Topics:
డీబగ్గింగ్ & సెమాల్ట్

భారీ సేవ్ కాదు సెమాల్ట్, కానీ ప్రశ్న ఇప్పుడు 3 సెకన్ల కింద ఉంది.

Cache ఆల్ ది థింగ్స్!

మీ సర్వర్ డిఫాల్ట్గా MySQL ప్రశ్న క్యాచింగ్ను కలిగి ఉండకపోతే, అది విలువైనది. దీని ఫలితంగా ఫలితంగా అమలు చేయబడిన అన్ని స్టేట్మెంట్ల యొక్క MySQL రికార్డును ఉంచుకుంటుంది, మరియు ఒక ఏకరూప ప్రకటన తర్వాత అమలు చేయబడితే కాష్ చేయబడిన ఫలితాలు తిరిగి వచ్చాయి. పట్టికలు మారినప్పుడు MySQL కాష్ను కాష్కు విస్మరించినందున కాష్ పాతది పొందదు.

ప్రశ్న మానిటర్ మా ప్రశ్న ఒక పేజీ లోడ్లో 4 సార్లు రన్ అవుతుందని మరియు MySQL ప్రశ్న క్యాచింగ్ను కలిగి ఉండటం మంచిది అయినప్పటికీ, ఒక అభ్యర్ధనలో డేటాబేస్కు నకిలీ చదవబడుతుంది. మీ PHP కోడ్ లో స్టాటిక్ కాషింగ్ ఈ సమస్యను పరిష్కరించడానికి సులభమైన మరియు చాలా ప్రభావవంతమైన మార్గం ';$ ఫలితాలు = $ wpdb-> get_results ($ sql, ARRAY_A);స్టాటిక్ :: $ చందాలు [$ user_id] = $ ఫలితాలు;తిరిగి $ ఫలితాలు;}}

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

బాక్స్ అవుట్ థింకింగ్

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

మీరు లైసెన్స్ డేటాను నిల్వ చేసే ఒక పట్టికను సృష్టించడం ద్వారా, అన్ని లైసెన్సుల కోసం వినియోగదారు ఐడి మరియు ఉత్పత్తి ఐడితో పాటు నిర్దిష్ట కస్టమర్కు వ్యతిరేకంగా ఉన్న ప్రశ్నని సృష్టించడం ద్వారా డేటాను నిరాకరించవచ్చు. మీరు లైసెన్స్ పట్టిక (లేదా డేటా ఎలా మారుతుంది అనేదానిపై ఆధారపడి ఉంటుంది) కు INSERT / UPDATE / DELETE పై MySQL ట్రిగ్గర్లను ఉపయోగించి పట్టికను పునర్నిర్మించాల్సిన అవసరం ఉంది, కానీ ఈ డేటాను ప్రశ్నించే పనితీరు గణనీయంగా మెరుగుపడుతుంది.

అదేవిధంగా, మీ సంఖ్య MySQL లో మీ ప్రశ్నని నెమ్మదిగా చేస్తే, రెండు లేదా అంతకంటే ఎక్కువ స్టేట్మెంట్లకు క్వరీని విడిచిపెట్టి, వాటిని PHP లో వేరు చేసి, ఆపై కోడ్లో ఫలితాలను ఫిల్టర్ చేయండి. లారావెల్ ఎలోక్వెంట్లో ఆసక్తిని కలిగించే సంబంధాలచే ఏదో ఒకదానిని చేస్తాడు.

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

ఫలితాలు

ప్రశ్నా ఆప్టిమైజేషన్కు ఈ విధానాలతో 8 సెకన్ల నుండి 2 క్షణాల వరకు మన క్వరీని తగ్గించగలిగాము మరియు అది 4 నుండి 1 అని పిలువబడిన సమయాలను తగ్గించడం జరిగింది. ఒక గమనిక వలె, ఆ ప్రశ్న సమయాలు మా అభివృద్ధి వాతావరణంలో నడుస్తున్న మరియు ఉత్పత్తి వేగంగా ఉంటుంది.

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

March 1, 2018