Back to Question Center
0

Çareserî SQL Queries Ji bo Destpêk Destpêk Çareserkirin Çawa Pirsgirêkên SQL Daxuyaniyên Kûçikên Agahdariyê Hişyar bikin Related Topics: Debugging & Semalt

1 answers:
Çawa Dîtinên SQL ji bo Agahiyên Karûbarên Dîran (Xwe) çawa çêtir bikin?

Ev gotara bi rastî di blogê de Semalt Semalt de hate belav kirin, û li vir bi destûra nû ve hat guherandin.

Hûn dizanin ku ew bikarhênerên ku zûtirîn bikarhênerên == zehfdar e, ji rûpela çêtir çêtirîn Google, û guhertin. Dibe ku hûn difikirin ku Semalt-ê ku hûn dikarin bibin zûtirîn as: dibe ku hûn çalakiya malperê, ji pratîkên çêtirîn ên sazkirina sazkirinê, ji kodê hêdî, û wêneyên xwe ji CDN-ê ve vekin dîtin, lê her tişt e ?

Bi malperên dînamîk, mîna Sîtaltê dane-danûstandin, hûn dikarin li ser destên xwe jî pirsgirêkek heye: Dîtin pirsên ku hûn malpera xwe kêmtir dikin.

Di vê navnîşê de, Semalt ji we re çawa pirsyarên tehlûkan tête nasîn, hûn çawa pirsgirêkên têgihîştin, pirsgirêkên lezgîn û rêbazên din ên ku ji bo tiştên hêşdirêj dibin - find australiansuper. Semalt bi pirsek rastîn bikar anîna ku em demek berê kiribû ku ew tiştên ku li ser pirtirkêmtirîna mêvandarên deliciousbrains derxistin. com.

Nasnameya

Pêvajoya yekemîn di çareserkirina hêdî ya SQL-ê de ew e ku ew bibînin. Ashley pesnê pêvajoya dakêşkirina dakêşê çêdike. Query Monitor li ser blogê berî, û ew pirtûka lêgerînê ya taybetmendiyê ya pelan e ku bi rastî rastî ev amûr dibe ku ji bo pirsên SQL-ê danişîn bêdeng bike. Di raporta rûpela petrolê de li ser hemî databasesê hatine darizandin. Ew ji bo ku hûn bi qodê an naveroka (pelê, mijarê an an Semalt Semalt) bi wan re veşartin destnîşankirin, û destnîşan dike ku ew wan digotin, û pirsên dubare û hûrgelan nîşan dide:

Çareserî SQL Queries Ji bo Destpêk Destpêk ÇareserkirinÇareserkirina SQL Sernavên Ji bo Malperên Faster Destnîşankirin Babet:
Debugging & Semalt

Heke hûn ne naxwazin plugin debuging li ser hilberê çêbikin (dibe ku hûn li ser hin çalakiyên xwe zêde bikin) hûn dikarin bibînin ku hûn li ser MySQL Slow Semalt Log veguherînin, ku hemî pirsên ku hin tiştan tête têketin Heta dema ku bicih kirin. Ew bi awayekî hêsan e ku hêsankirî û saz dike ku li wir der barê pirsên têketinê ye. Wekî ku ev tewra server-level e, pêvajoyek destnîşankirî wê kêm e ku pêveka plugîneyê li ser malperê ye, lê dema ku bikar nakin.

Têgihiştinê

Gava ku we pirsek lêkêşînek dîtiye ku hûn dixwazin çêtirîn, pêngaveke din e ku hewce bikin ku bizanin ka çi pirsgirêka hêdî digire. Semalt di pêşveçûnê de ji malpera me re, me pirsek ku 8 duyemîn dorpêç kir ku ji bo bicîhkirinê!

     SELECTl. key_id,l. order_id,l. activation_email,l. licence_key,l. software_product_id,l. software_version,l. çalakiyên_limitl. afirandin,l. nûjen_type,l. renewal_id,l. exempt_domain,s. next_payment_date,s. cî,pm2. post_id 'product_id' wekî,pm. meta_value AS 'user_id'JIoiz6q8a_woocommerce_software_licences lJİ NİNEoiz6q8a_woocommerce_software_subscriptions s ON s. key_id = l. key_idJİ NİNEoiz6q8a_posts p ON p. ID = l. order_idJİ NİNEoiz6q8a_postmeta pm pm pm. post_id = p. NasnameyaÛ pm meta_key = '_customer_user'Jİ NİNEoiz6q8a_postmeta pm2 ê pm2. meta_key = '_software_product_id'Û pm2. meta_value = l. software_product_idKOp. post_type = 'shop_order'Û pm meta_value = 279ORDER BY s. next_payment_date    

Em bi WooCommerce û versiyonek kurtkirî ya Plugin Software WêComments bikar bînin ku ji bo pargîdanên me vebigere. Armanca vê pirsîn e ku her kesî ji bo berevanîya karsaziyê bigire ku em hejmara navnîşê wan nas bikin. Di heman demê de hene hene ku çend hevalên ku ji hêla pluginên şaredariyê ve hatî sazkirinên tîmên taybet ên têne çêkirin hene. Bila ji bo ku hûn bêtir agahî fêm bikin dive.

MySQL Hevalê te ye

MySQL xwedî daxuyaniyek destûra xwe heye DESCRIBE ku ji bo agahdariya hilberê li ser damezirandina tehlîlan, wekî wek kemên, daneyên daneyên danûstandinan, bikar anîn. Ji ber ku hûn bicîh kirin DESCRIBE wp_postmeta; hûn ê encamên jêrîn bibînin:

Zevî Tîpa Null Key Destpêk Extra
meta_id bigint
neçar kirin
NO PRI NULL auto_increment
post_id bigint
neçar kirin
NO MUL 0
meta_key varchar (255) YES MUL NULL
meta_value longtext YES NULL

Ew baş e, lê hûn dikarin dizanin ku hûn dizanin. Lê hûn dizanin ku Daxuyaniya xwerû pêşniyar dikare bi rastî SELECT , INSERT , UPDATE , REPLACE ) û Daxuyanî şandin? Ev bi gelemperî bi hevpeymaniya xwe BİXWÎNE tê zanîn û dê agahdariya me binivîsin ku çawa dê daxuyaniyek darve kirin.

Vê encamên ku ji bo pirsê me hêdî ne:

id select_type masê cure pîvan_ key key_len ref rows Extra
1 SIMPLE pm2 ref meta_key meta_key 576 const 28 Bikaranîna ku derê; Bikaranîna demkî Bikaranîna pelên
1 SIMPLE pm ref post_id, meta_key meta_key 576 const 37456 Bikaranîna ku
1 SIMPLE p eq_ref PRIMARY, type_status_date PRIMARY 8 deliciousbrainsdev. pm. post_id 1 Bikaranîna ku
1 SIMPLE l ref PRIMARY, order_id order_id 8 deliciousbrainsdev. pm. post_id 1 Bikaranîna rewşa şertê; Bikaranîna ku
1 SIMPLE s eq_ref PRIMARY PRIMARY 8 deliciousbrainsdev. l. key_id 1 NULL

Di pêşiya çavan de, ev hêsan e ku şirove bikin. Bi kêfxweş a kesên li ser Semaltê rêberê rêbazek berfireh dane ku fêmkirina daxuyanî.

Dema herî girîng cure ye, ku kîjan tables tevlî bibin. Heke hûn dibînin Hemû hingê wê wateya ku MySQL ji hemû dîskek ji dîskê ve dixwîne, rêjeya I / O zêde dike û li ser CPU tête kirin. Ev wekî "scanek full table" dizanin ((li ser vê yekê).

Dema dora dora nîşana baş ya ku MySQL heye ku ev e, ew nîşan dide ku çiqas rêzên ku ew di encamê de encam dîtine.

Gotar jî agahdariya me bêtir agahdar dike ku em dikarin bikar bînin lêgerîn. Ji bo nimûne, pergala pm2 (wp_postmeta), em ji me re dibêjin em pelên bikar bînin, ji ber ku em ji encamên ku ji wan re daxuyaniyek digerin ORDER BY qala bi daxuyaniyê bi kar tînin. Heke em her weha pirsî digerin, em ê di binê darvekirinê de zêde bibin. Ji bo databases li ser MySQL 5. 6 û ji jorîn, encamên BİXWÎNE ji bo JSON, û Karsaziya MySQL Karker veguherand ku JSON di planê darvekirina darizandinê de ji daxuyaniyek hate xist kirin:

Çareserî SQL Queries Ji bo Destpêk Destpêk ÇareserkirinÇareserkirina SQL Sernavên Ji bo Malperên Faster Destnîşankirin Babet:
Debugging & Semalt

Vê gavê xwe bi baldarî pirsgirêkên xwe ji hêla parçeyên hûrgelan ve bi rengê xercê dike. Em dikarin rasterast bibin ku li tevlêbûna wp_woocommerce_software_licences (navê lîseyê) tehlûbeyeke cidî ye.

Solving

Vê beşek pirs ji pirsek tije tije tije ye, ku hûn hewl bikin, ji ber ku ew di navnîşa wp_woocommerce_software_licences de di nav tevahiya navnîşa ne-indexed order_id bikar tîne. li sifrê wp_posts . Ev pirsgirêkeke gelemperî ji bo pirsên hêdî û yek e ku dikare bi hêsanî çareser bibe.

Indexes

order_id parçeyek girîng e ku di daneya daneyên danûstendinê de ye, û eger em bi vî awayî digerin, em bi rastî li ser pîvanê be, heger meya MySQL dê her teylê maseya tehlanê biqewime heta Ew hewlên hewce dike. Bila lîstekek zêde bike û bibînin ku çi dike:

     CREATE INDEX order_id ON wp_woocommerce_software_licences (order_id)    

Çareserî SQL Queries Ji bo Destpêk Destpêk ÇareserkirinÇareserkirina SQL Sernavên Ji bo Malperên Faster Destnîşankirin Babet:
Debugging & Semalt

Wow, em ji bo 5 seetan ve girêdayî kir ku pirsê ku gotar, karê baş!

Pirsgirêka te

Pirsgirêka pirsa - tevlî tevlîbûna tevlêbûnê, ji hêla subquery ve. Ma tiştên ku ew hewce ne hewce dike? Ma dikare pêşniyar kirin?

Di vê rewşê de em ê maseya lîsansê da ku dora order_id bikar bînin, hemî dema ku daxuyaniyê sînor bikin ku ji celebên dikir . Ev e ku ji bo yekseriya danûstendinan bicîh bikin ku em ê bi tenê bikarhênerên rastîn ên rastîn bikar bînin. Lêbelê, ev parçeyeka bêhtir ji pirsê ye. Em dizanin ku ew betal e ku ewlehiya pergala pêdivî ye ku li ser maseya pêdivî ye order_id li ser peyama WooCommerce li ser maseya sîgorteyê ye, wekî ku ev qaîdeya PHP-ê bi destnîşankirî ye. Bila tevlî bibin û bibînin ka tiştên ku çêtir dibe:

Çareserî SQL Queries Ji bo Destpêk Destpêk ÇareserkirinÇareserkirina SQL Sernavên Ji bo Malperên Faster Destnîşankirin Babet:
Debugging & Semalt

Semalt nebaweriyek mezin ne, lê lêpirsîn niha di 3 saetan de ye.

Kişandin Hemû Hemû Dike!

Heke ger serverê we nexşeya MySQL li ser daktorê lêgerîn wê paşê ye, wê wateya berbiçav e. Ev tê wateya MySQL wê qeydkirina hemî agahiyên ku bi encama ku bi encam hate darizandin, û hingê daxuyaniyek wekhev e ku ev encama kiryarên kişandinê vegerin. Cache nayê stale kirin, wekî ku MySQL bi kengê guhertin dema kachek kişand.

Çavdêriya Pirsgirêka Pirsgirêka me pirsî ku 4-car ser ser rûpelê yek yek bimeşîne, û her çiqas baş e ku ji bo kêşeya MySQL li ser kêşeya lêpirsînê ye, dupat bike ku di daxwaza databan de bixwîne divê rastî rawestiya temamî dûr bike. Kişandina Static-in di koda PHP-ê de rêvek pirsgirêkek hêsan e û bandorek e ';$ results = $ wpdb-> get_results ($ sql, ARRAY_A);static :: $ membership [$ user_id] = results results;vegerandin $ results;}}

Cache xwedan daxwazek ji bo daxwazek bêtir eşkere ye ku object objectured. Heke hûn dixwazin li seranserî pirsên encamên domdar binêrin, hingê hûn hewce ne ku hûn li ser Kacheya Dînem berdewam bikin. Semalt, koda we dê hewceyê berpirsiyariya kasa xweş bikin, û navnîşa kacheya betal bike dema dema guhertina danûstendinê de.

Bifikirin Derveyî Box

Semalt bi rêbazên din hene ku em dikarin hewl bikin û hewl bidin ku lêpirsîna lêpirsînê bigirin ku ji tenê pirsê an jî pirsek zêde bike. Yek ji beşên herî piçûk yên pirsa herî mezin e ku karê karê ku bi tevlêbûna mêvandarên nasnameyê bi hilberîna hilberê ve tête çêkirin e, û divê em ji bo her karmendê bikin. Heke ku em her tiştê ku bi tenê re tevlihev kir, da ku em hewceyê ku em hewceyê daneyên danûstendinê de bistînin?

Hûn dikarin danûstandinên ku ji bo daneyên lîsansê veşartin, bi nasnameya bikarhêner û hilberê ji bo hemî lîsansên hilberê û tenê li dijî vê yekê ji bo kirrûberek taybet. Hûn hewce ne ku hûn bi masûlkera MySQL re li ser INSERT / UPDATE / DELETE ji bo peymana lîsansê (an jî kesên din girêdayî dibe ku çawa çawa dibe ku daneyên guhertin dikare) dibe ku ev daneyên girîng ên lêpirsînê dike.

Wusa, heke hejmarek ji we re pirsê xwe li MySQL qewimîne, dibe ku ji bo pirsê du-an jî bêtir daxuyan bike ku di nav PHP-ê de veguhastin û paşê li encamên koda hilberînin û hilber bikin. Laravel peywendiyên barkêş ên di nav eloqê de tiştek wekhev e.

Vêwirdar dikare ji bo pirsên mezin ên wp_posts rûniştin, lêgerîn ku hebûna we gelek dane hene, û gelek celebên taybet ên postên cuda. Heke hûn ji bo nimûneya paşengiya hêdî ya lêpirsînê digerin, hingê ji modela veguhestina postê û posta sermayeyê veguherînin bisekinin.

Encam

Di van rêbazan de ji bo çêkirina pêşniyazkirina pirsê me em ji me re 8 pirsan dakêşin ji lêgerîna du sîhanê re tenê 2 secs bike, û kêmkirina demên ku ew ji 4 ji 1 heta 1 re tê gotin. li ser hawîrdora pêşveçûna me ya pêşveçûnê û li ser hilberîna zûtir dibe.

Ez hêvî dikim ku ew rêberiyek alîkariyek çêbû ku ji bo pirsên hêdî digire û wan derxistin. Sazkirina Semalt dikare bibe mîna karê darê, lê gava ku hûn hewl didin ku hûn hewl didin û hinekî zûtir dibin ku hûn dest pê bikin ku bugê bikin û dixwazin dixwazin tiştên din jî baştir bikin.

March 1, 2018