Back to Question Center
0

விரைவான தளங்களுக்கு SQL வினவல்களை எப்படி மேம்படுத்துவது விரைவான தளங்களுக்கான SQL வினவல்களை ஒருங்கிணைக்க எப்படி தொடர்புடைய தலைப்புகள்: பிழைதிருத்தம் & Semalt

1 answers:
வேகமான தளங்களுக்கு SQL வினவல்களை மேம்படுத்த எப்படி

இந்த கட்டுரை முதலில் பிரமாதமான செமால்ட் வலைப்பதிவில் பிரசுரிக்கப்பட்டது, இங்கு அனுமதி மறுக்கப்பட்டது.

ஒரு வேகமான தளத்தை நீங்கள் அறிவீர்கள். * மகிழ்ச்சியான பயனர்கள், கூகிள் தரவரிசை மேம்படுத்தப்பட்ட மற்றும் அதிகரித்த மாற்றங்கள் - access control systems brands. ஒருவேளை நீங்கள் உங்கள் செமால்ட் தளம் எவ்வளவு வேகமாக இருக்கும் என நினைக்கிறீர்கள்: நீங்கள் சேவையகத்தை அமைப்பதற்கான சிறந்த நடைமுறைகளிலிருந்து, மெதுவான குறியீட்டை சரிசெய்தல் மற்றும் சிடிஎன்னு உங்கள் படங்களை ஆஃப்லோடிங் செய்ய, தள செயல்திறனைப் பார்த்துள்ளீர்கள், ஆனால் எல்லாம் ?

செம்மைல் போன்ற மாறும், தரவுத்தள உந்துதல் வலைத்தளங்கள் மூலம், நீங்கள் இன்னும் உங்கள் கைகளில் ஒரு சிக்கல் இருக்கலாம்: தரவுத்தள வினவல்கள் உங்கள் தளத்தில் மெதுவாக.

இந்த பதிவில், Semalt நீங்கள் பிரச்சினைகள் புரிந்து கொள்ள எப்படி கேள்விகளை அடையாளம் எப்படி மூலம், அவர்களை கொண்டு பிரச்சினைகள் புரிந்து கொள்ள எப்படி, விரைவான திருத்தங்கள் மற்றும் விஷயங்களை வேக மற்ற அணுகுமுறைகள் இணைந்து. செம்மையாக நாங்கள் சமீபத்தில் சமாளித்த ஒரு உண்மையான வினவலைப் பயன்படுத்தி, ருசிய உணவுப்பொருட்களின் வாடிக்கையாளர் போர்ட்டில் விஷயங்களை குறைத்து விட்டோம். காம்.

அடையாளம் காணல்

மெதுவாக SQL வினவல்களை சரிசெய்ய முதல் படி அவர்களை கண்டுபிடிக்க வேண்டும். ஆஷ்லே முன் பிழைத்திருத்தம் சொருகி கேள்வி மானிட்டர் புகழ் பாடினார், அது உண்மையில் மெதுவாக SQL கேள்விகளை அடையாளம் ஒரு விலைமதிப்பற்ற கருவி செய்கிறது என்று சொருகி தரவுத்தள கேள்விகளை அம்சம் தான். பக்கம் கோரிக்கையின் போது செயல்படுத்தப்பட்ட அனைத்து தரவுத்தள வினவல்களின் சொருகி அறிக்கைகள். அதை நீங்கள் குறியீடு அல்லது கூறு (அவர்கள் சொருகி, தீம் அல்லது Semalt கோர்) அவர்களை வடிகட்ட அனுமதிக்கிறது, மற்றும் நகல் மற்றும் மெதுவான கேள்விகளை சிறப்பம்சங்கள்:

விரைவான தளங்களுக்கு SQL வினவல்களை எப்படி மேம்படுத்துவதுவிரைவான தளங்களுக்கு SQL வினவல்களை மேம்படுத்துவது எப்படி:
பிழைதிருத்தம் & செமால்ட்

நீங்கள் ஒரு தயாரிப்பு தளத்தில் ஒரு பிழைத்திருத்தம் சொருகி நிறுவ விரும்பவில்லை என்றால் (ஒருவேளை நீங்கள் சில செயல்திறன் மேல்நிலை சேர்ப்பதை பற்றி கவலை) நீங்கள் MySQL மெதுவாக செமால் புகுபதிவு திரும்ப தேர்வு செய்யலாம், இது ஒரு சில எடுத்து அந்த அனைத்து கேள்விகளையும் பதிவு இயக்க நேரம். இது கேள்விகளுக்கு புகுபதிகை செய்வதற்கு கட்டமைக்க மற்றும் அமைக்க மிகவும் எளிமையானது. இது சர்வர்-நிலை மாற்றங்களைப் போலவே, செயல்திறன் வெற்றி குறைவாக இருக்கும், இது தளத்தின் பிழைத்திருத்த சொருகி, ஆனால் அதைப் பயன்படுத்தாதபோது அதை அணைக்க வேண்டும்.

புரிந்துணர்வு

நீங்கள் மேம்படுத்த விரும்பும் ஒரு விலையுயர்ந்த வினவலை நீங்கள் கண்டுபிடித்ததும் அடுத்த வினா என்னவென்று கேள்வி மெதுவாகச் செய்வதைப் புரிந்துகொள்ள முயற்சிக்க வேண்டும். எங்கள் தளத்தில் அபிவிருத்தி போது Semalt, நாம் இயக்க சுமார் 8 வினாடிகள் எடுத்து ஒரு கேள்வி கண்டுபிடிக்கப்பட்டது!

     SELECTஎல். KEY_ID,எல். ORDER_ID,எல். activation_email,எல். , licence_keyஎல். software_product_id,எல். மென்பொருள் பதிப்பு,எல். , activations_limitஎல். உருவாக்கப்பட்ட,எல். , renewal_typeஎல். renewal_id,எல். , exempt_domainங்கள். next_payment_date,ங்கள். அந்தஸ்து,pm2. post_id AS 'product_id',மணி. meta_value AS 'user_id'இருந்துoiz6q8a_woocommerce_software_licences lINNER சேரsiz sq. oiz6q8a_woocommerce_software_subscriptions s கள். key_id = l. KEY_IDINNER சேரoiz6q8a_posts p ON p. ஐடி = எல். ORDER_IDINNER சேரoiz6q8a_postmeta pm மணி. post_id = ப. ஐடிமற்றும் மணி. meta_key = '_customer_user'INNER சேரoiz6q8a_postmeta pm2 pm2. meta_key = '_software_product_id'மற்றும் pm2. meta_value = l. software_product_idஎங்கேப. post_type = 'shop_order'மற்றும் மணி. meta_value = 279கட்டளை. next_payment_date    

நாங்கள் WooCommerce மற்றும் WooCommerce மென்பொருள் சந்தாக்கள் தனிப்பயனாக்கப்பட்ட பதிப்பு எங்கள் கூடுதல் ஸ்டோர் இயக்க சொருகி பயன்படுத்த. இந்த கேள்விக்கான நோக்கம் ஒரு வாடிக்கையாளருக்கு அவர்களின் சந்தாதாரண எண்ணை அறிந்த எல்லா சந்தாக்களையும் பெற வேண்டும். மென்பொருள் சந்தா சொருகால் உருவாக்கப்பட்ட தனிப்பயன் அட்டவணையில் ஒரு ஜோடி சேர்கிறது. வினாவை இன்னும் புரிந்து கொள்ள நாம் டைவ் செய்வோம்.

MySQL உங்கள் நண்பர்

MySQL ஆனது ஒரு எளிமையான அறிக்கையை DESCRIBE கொண்டுள்ளது, இது அதன் பத்திகள், தரவு வகைகள், இயல்புநிலைகள் போன்ற அட்டவணையின் கட்டமைப்பைப் பற்றிய தகவல்களை வெளியிட பயன்படுகிறது. நீங்கள் DESCRIBE wp_postmeta நிறைவேற்றினால்; பின்வரும் முடிவுகளை நீங்கள் காண்பீர்கள்:

களம் வகை பூஜ்யம் கீ இயல்புநிலை கூடுதல்
meta_id bigint
கையொப்பமிடாத
இல்லை PRI NULL கார்_நிதி
post_id bigint
கையொப்பமிடாத
இல்லை MUL 0
meta_key வார்ச்சார் (255) YES MUL NULL
meta_value நீளமான YES NULL

அது குளிர் தான், ஆனால் நீங்கள் இதை ஏற்கனவே அறிந்திருக்கலாம். SELECT , INSERT , UPDATE , REPLACE ) மற்றும் நீக்கல் அறிக்கைகள்? இது பொதுவாக ஒத்திருப்பதன் மூலம் EXPLAIN என்பதன் மூலம் அறியப்படுகிறது மற்றும் அறிக்கை எவ்வாறு செயல்படுத்தப்படும் என்பதைப் பற்றிய விரிவான தகவல்களை எங்களுக்குத் தரும்.

இங்கே எங்கள் மெதுவான கேள்விக்கான முடிவுகள்:

ஐடி select_type அட்டவணை வகை சாத்தியமான_விதிகள் முக்கிய key_len ref வரிசை கூடுதல்
1 SIMPLE pm2 ref meta_key meta_key 576 கான்ஸ்டன்ட் 28 எங்கு பயன்படுத்துவது; தற்காலிகமாகப் பயன்படுத்துதல்; Filesort பயன்படுத்துதல்
1 SIMPLE மணி ref post_id, meta_key meta_key 576 கான்ஸ்டன்ட் 37456 எங்கு பயன்படுத்துவது
1 SIMPLE eq_ref முதன்மையானது, வகை_ஸ்தாஸ்_டேட் முதன்மையானது 8 மணி. post_id 1 எங்கு பயன்படுத்துவது
1 SIMPLE எல் ref முதன்மையான, ஒழுங்குமுறை order_id 8 மணி. post_id 1 குறியீட்டு நிபந்தனை பயன்படுத்தி; எங்கே பயன்படுத்துவது
1 SIMPLE கள் eq_ref முதன்மையானது முதன்மையானது 8 எல். key_id 1 NULL

முதல் பார்வையில், இது விளக்குவது மிகவும் எளிதானது அல்ல. அதிர்ஷ்டவசமாக Semalt மணிக்கு எல்லோரும் அறிக்கை புரிந்து ஒரு விரிவான வழிகாட்டி ஒன்றாக.

மிக முக்கியமான பத்தியில் வகை , அட்டவணைகள் எவ்வாறு இணைக்கப்படுகின்றன என்பதை விளக்குகிறது. நீங்கள் ALL பார்த்தால், MySQL முழு அட்டவணையை வட்டில் இருந்து வாசித்து, I / O விகிதங்களை அதிகரிக்கிறது மற்றும் CPU இல் சுமைகளை சுமத்துகிறது. இது ஒரு "முழு அட்டவணை ஸ்கேன்" (மேலும் பின்னர் அது) என்று அறியப்படுகிறது.

வரிசைகள் நெடுவரிசை MySQL செய்ய வேண்டியது என்ன என்பதற்கான ஒரு நல்ல அறிகுறியாகும், இதன் விளைவாக கண்டுபிடிக்க எத்தனை வரிசைகளை இது காட்டுகிறது.

விளக்குவது மேலும் தகவல்களுக்கு உகந்ததாக பயன்படுத்தலாம். உதாரணமாக, pm2 அட்டவணை (wp_postmeta), இது நமக்கு சொல்கிறது fileortor ஐப் பயன்படுத்துகிறோம், ஏனென்றால் ஒரு ORDER BY பிரிவைப் பயன்படுத்தி வரிசைப்படுத்தப்படும் முடிவுகளை நாங்கள் கேட்கிறோம். நாங்கள் வினவலைத் தொகுத்திருந்தால், நாங்கள் மரணதண்டனைக்கு மேல் சேர்ப்போம். MySQL 5. 6 மற்றும் மேலே இயங்கும் தரவுத்தளங்களுக்கு, EXPLAIN முடிவுகளை JSON ஆக வெளியீடு செய்யலாம், MySQL Workbench அந்த JSON ஐ அறிக்கையின் காட்சி செயல்பாட்டு திட்டமாக மாற்றிவிடும்:

விரைவான தளங்களுக்கு SQL வினவல்களை எப்படி மேம்படுத்துவதுவிரைவான தளங்களுக்கு SQL வினவல்களை மேம்படுத்துவது எப்படி:
பிழைதிருத்தம் & செமால்ட்

செலவினங்களின் வினவல்களின் பகுப்பிலுள்ள வண்ணங்களைத் தானாகவே உங்கள் கவனத்தை ஈர்க்கிறது. wp_woocommerce_software_licences (அ) எல்) அட்டவணையில் சேர நேரிடையாக நேரிடையான ஒரு சிக்கல் உள்ளது.

தீர்வு

வினவலின் அந்த பகுதி முழு அட்டவணை அட்டவணை ஸ்கேன் செய்யப்படுகிறது, இது தவிர்க்கப்பட முயற்சிக்க வேண்டும், இது ஒரு அல்லாத குறியிடப்படாத நிரலை order_id wp_woocommerce_software_licences wp_posts அட்டவணைக்கு. இது மெதுவான கேள்விகளுக்கான ஒரு பொதுவான பிரச்சினையாகும், எளிதில் தீர்க்கப்படக்கூடிய ஒன்றாகும்.

குறியீடுகள்

order_id அட்டவணையில் தரவை அடையாளம் காண்பதற்கான ஒரு அழகான முக்கிய துண்டு, மற்றும் நாம் இதைப் போன்ற வினாக்கலை செய்தால், நெடுவரிசையில் ஒரு அட்டவணை இருக்க வேண்டும், இல்லையெனில் MySQL மொழியில் ஒவ்வொரு வரியும் ஸ்கேன் செய்யும் அது தேவைப்படும் வரிசைகளைக் காண்கிறது. ஒரு குறியீட்டைச் சேர்ப்போம் மற்றும் அது என்ன என்று பார்ப்போம்:

     wp_woocommerce_software_licences (order_id)    

விரைவான தளங்களுக்கு SQL வினவல்களை எப்படி மேம்படுத்துவதுவிரைவான தளங்களுக்கு SQL வினவல்களை மேம்படுத்துவது எப்படி:
பிழைதிருத்தம் & செமால்ட்

ஓ, அந்த குறியீட்டு, நல்ல வேலை சேர்ப்பதன் மூலம் வினாடியில் 5 விநாடிகளுக்கு மேல் ஷேவ் செய்ய முடிந்தது!

உங்கள் கேள்விக்கு

வினவல் சொற்பொழிவு - சேர மூலம் சேரவும், துணைக்குழு மூலம் துணைக்குழு. அது தேவையில்லாத விஷயங்களைச் செய்யுமா? உகப்பாக்கம் செய்ய முடியுமா?

இந்த வழக்கில் நாம் ஆர்டர்_ஐட் ஐப் பயன்படுத்தி பதிவுகள் மேசைக்கு உரிமம் அட்டவணையில் சேர்கிறோம், எப்போது வேண்டுமானாலும் ஷாப்பிங்-ஆர்டர் வகைகளை அறிவிக்க வேண்டும். நாம் சரியான வரிசையில் பதிவுகளை மட்டுமே பயன்படுத்துகிறார்களா என்பதை உறுதிப்படுத்துவதே தரவு நேர்மையை செயல்படுத்துவதாகும். இருப்பினும், அது வினவலின் மிகுந்த பகுதியாகும். நாம் இது PHP சொருகி குறியீடு செயல்படுத்தப்படுகிறது என, அட்டவணை ஒரு மென்பொருள் உரிமம் வரிசையில் பதிவுகள் அட்டவணை WooCommerce பொருட்டு தொடர்பான ஒரு order_id என்று ஒரு பாதுகாப்பான பந்தயம் என்று எனக்கு தெரியும். சேரத்தை அகற்றுவோம், அது விஷயங்களை மேம்படுத்துகிறதா என பார்ப்போம்:

விரைவான தளங்களுக்கு SQL வினவல்களை எப்படி மேம்படுத்துவதுவிரைவான தளங்களுக்கு SQL வினவல்களை மேம்படுத்துவது எப்படி:
பிழைதிருத்தம் & செமால்ட்

ஒரு பெரிய சேமிப்பு இல்லை Semalt, ஆனால் கேள்வி இப்போது 3 வினாடிகள் கீழ் உள்ளது.

கேச் த தி திங்ஸ்!

உங்கள் சேவையகத்தில் இயல்புநிலையில் MySQL வினவல் தேடலைக் கொண்டிருக்கவில்லை என்றால், அது திருப்புமுனையாகும். இதன் விளைவாக MySQL ஆனது விளைவாக நிறைவேற்றப்பட்ட அனைத்து அறிக்கையையும் பதிவுசெய்துகொண்டு, ஒரே மாதிரியான அறிவிப்பு பின்னர் செயல்படுத்தப்பட்டால், தேக்ககப்படுத்தப்பட்ட முடிவுகள் திரும்பப் பெறுகின்றன. அட்டவணைகள் மாறும்போது MySQL கேச் கசிவைப் போலவே தற்காலிக சேமிப்பு இல்லை.

Query Monitor எங்கள் கேள்வி ஒரு பக்கம் சுமை 4 முறை இயங்கும் வேண்டும், மற்றும் அது MySQL கேள்வி கேச்சிங் வேண்டும் நல்லது என்றாலும், ஒரு கோரிக்கை தரவுத்தள படித்து படித்து உண்மையில் முழு நிறுத்தத்தை தவிர்க்க வேண்டும். உங்கள் PHP குறியீட்டில் நிலையான கேச்சிங் இந்த சிக்கலை தீர்க்க ஒரு எளிய மற்றும் மிகவும் பயனுள்ள வழி ';$ முடிவு = $ wpdb-> get_results ($ sql, ARRAY_A);நிலையான :: $ சந்தாக்கள் [$ user_id] = $ முடிவுகள்;$ முடிவுகள் திரும்ப;}}

கேச் கோரிக்கை ஒரு ஆயுட்காலம், குறிப்பாக குறிப்பாக உடனடி பொருள் என்று. கோரிக்கைகளை முழுவதும் வினவல் முடிவுகளை நீங்கள் பார்க்கிறீர்கள் என்றால், நீங்கள் ஒரு நிலையான பொருள் Cache ஐ செயல்படுத்த வேண்டும். சிமால்ட், உங்கள் குறியீடு கேச் அமைப்பதற்கான பொறுப்பு இருக்க வேண்டும், மற்றும் அடிப்படை தரவு மாற்றங்கள் போது கேச் நுழைவு செல்லுபடியாகும்.

பெட்டியை வெளியே நினைத்து

செமால்ட் என்பது வினவல் செயல்முறைக்கு முயற்சி செய்வதற்கு வேறொரு அணுகுமுறையாகும், இது வினவல் அல்லது குறியீட்டைச் சேர்ப்பதைக் காட்டிலும் ஒரு பிட் இன்னும் பணிபுரியும். வாடிக்கையாளர் அடையாளத்திலிருந்து தயாரிப்பு ஐடிக்கு செல்ல அட்டவணையில் சேர செய்யப்படும் பணியாகும், மேலும் ஒவ்வொரு வாடிக்கையாளருக்கும் இதை செய்ய வேண்டும். நாம் ஒரு முறை மட்டும் சேருவதற்கு என்ன செய்தாலும், வாடிக்கையாளரின் தரவை நமக்கு தேவைப்படும்போது நாம் பெறமுடியுமா?

உரிம தரவை சேமித்து, அனைத்து உரிமங்களுக்கான பயனர் ஐடி மற்றும் தயாரிப்பு ஐடி மற்றும் ஒரு குறிப்பிட்ட வாடிக்கையாளருக்கு எதிரான வினவலுடன் ஒரு அட்டவணையை உருவாக்குவதன் மூலம் தரவைத் தரமுயர்த்தலாம். உரிம அட்டவணையில் (அல்லது தரவு மாறும் விதத்தைப் பொறுத்து) INSERT / UPDATE / DELETE இல் MySQL தூண்டுதல்களை பயன்படுத்தி அட்டவணையை மீண்டும் கட்ட வேண்டும், ஆனால் அந்த தரவை வினவல் செயல்திறனை இது கணிசமாக மேம்படுத்தும்.

இதேபோல், MySQL இல் உங்கள் வினவலை மெதுவாக சேர்த்தால், இரண்டு அல்லது அதற்கு மேற்பட்ட கூற்றுகளாக வினாவை உடைத்து, PHP இல் தனித்தனியாக இயக்கவும், அதன் பின்னர் குறியீட்டில் முடிவுகளை வடிகட்டவும். எலகோகத்தில் உள்ள ஆர்வமான ஏற்றுதல் உறவுகளால் லராவெல் ஏதேனும் ஒன்றைச் செய்கிறான்.

நீங்கள் தரவு ஒரு பெரிய அளவு இருந்தால், மற்றும் பல விருப்ப பதவியை வகைகள் இருந்தால், wp_posts அட்டவணையில் மெதுவாக கேள்விகளுக்கு வேர்ட்பிரஸ் வாய்ப்புகள் இருக்க முடியும். நீங்கள் உங்கள் பதவியை வகை மெதுவாக வினவலைக் கண்டறிந்தால், தனிப்பயன் இடுகை சேமிப்பக மாதிரியில் இருந்து தனிப்பயன் அட்டவணையில் இருந்து விலகிச் செல்லுங்கள்.

முடிவுகள்

வினவல் தேர்விற்கான இந்த அணுகுமுறைகளால் 8 வினாடிகளிலிருந்து 2 வினாடிகளுக்கு மேல் வினாவை எடுத்தோம், 4 முதல் 1 என்று அழைக்கப்படும் நேர அளவுகளை குறைக்கிறோம். ஒரு குறிப்பாக, எங்கள் வளர்ச்சி சூழலில் இயங்கும் மற்றும் உற்பத்தி விரைவாக இருக்கும்.

மெதுவான கேள்விகளைக் கண்டறிந்து அவற்றை சரிசெய்ய உதவும் வழிகாட்டியாக இது உள்ளது என நான் நம்புகிறேன். Semalt தேர்வுமுறை ஒரு பயங்கரமான பணி போல் தோன்றலாம், ஆனால் விரைவில் அதை நீங்கள் முயற்சி மற்றும் சில விரைவான வெற்றிகளை நீங்கள் பிழை பெற தொடங்கும் மற்றும் இன்னும் விஷயங்களை மேம்படுத்த வேண்டும்.

March 1, 2018