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
, தேர்ந்தெடுக்கப்பட்ட வரிசைகளின் எண்ணிக்கையைத் தேக்ககப்படுத்தவும் (எல்ஐஎம்ஐடி பயன்படுத்தப்படுவதற்கு முன்பு), மற்றும் பயன்படுத்தும்போது,SELECT FOUND_ROWS()
வினவலை மீண்டும் செயல்படுத்தாமல் இந்த தற்காலிகச் சேமிப்பக மதிப்பை மட்டுமே வழங்கும். INSERT
பல செருகல்களுக்கான தொடரியல் உள்ளது என்பதை மறந்துவிடாதீர்கள் . ஒரு வினவல் ஒரு லூப்பில் உள்ள பல வினவல்களை விட வேகமான அளவு வரிசையை இயக்கும்.LIMIT
உங்களுக்கு எல்லா தரவும் தேவையில்லாத இடத்தில் பயன்படுத்தவும் .INSERT… ON DUPLICATE KEY UPDATE…
தேர்ந்தெடுக்கப்பட்ட இடத்திலும்INSERT
அல்லதுUPDATE
அதற்குப் பிறகும், மற்றும் பெரும்பாலும் இடத்திலும் பயன்படுத்தவும்REPLACE
.- இந்த அற்புதமான அம்சத்தை மறந்துவிடாதீர்கள்
GROUP_CONCAT
. சிக்கலான கேள்விகளுக்கு இது உதவும்.
GO TO FULL VERSION