Middle
გქონდათ ოდესმე საჭიროება სარეკლამო მოთხოვნების ოპტიმიზაციისთვის?
sobes.tech AI
პასუხი AI-სგან
ஆம், அது தேவையாக இருந்தது. கேள்வி-பிடிப்புகளை மேம்படுத்துவது உயர் செயல்திறன் கொண்ட பயன்பாடுகளை உருவாக்குவதில் முக்கியமான பகுதி.
என் அனுபவம் பின்வருமாறு:
- கேள்வி செயலாக்க திட்டத்தின் பகுப்பாய்வு (EXPLAIN):
EXPLAIN-ஐ பயன்படுத்தி, தரவுத்தளம் கேள்வியை எப்படி செயலாக்குகிறது, எந்த குறியீடுகள் பயன்படுத்தப்படுகின்றன மற்றும் எங்கே சிக்கல்கள் ஏற்படுகின்றன என்பதை புரிந்துகொள்ள. - குறியீடுகள் உருவாக்கல் மற்றும் மேம்படுத்தல்: அடிக்கடி பயன்படுத்தப்படும் பத்திகளுக்கு பொருத்தமான குறியீடுகளைச் சேர்க்கவும், கூட்டு குறியீடுகளை உருவாக்கவும், வடிகட்டி, வரிசைப்படுத்தவும் மற்றும் இணைப்புகளை விரைவாக்கவும். பயன்படுத்தப்படாத அல்லது நகல் குறியீடுகளை நீக்கவும்.
- தவறான கேள்விகளை மறுஅமைத்தல்:
SELECT *-ஐ குறிப்பிட்ட பத்திகளை தேர்வு செய்வதற்குப் பதிலாக மாற்றவும்.- சிறந்த வகையான இணைப்புகளை (
JOIN) பயன்படுத்தவும் — பயன்பாட்டில் உள்ள துணை கேள்விகள் அல்லது உள்ளடக்கப்பட்ட சுழற்சிகள் பதிலாக. WHEREநிபந்தனைகளை எளிதாக்கவும்.- குறியீடு செய்யப்பட்ட பத்திகளில்
WHERE-இல் செயல்பாடுகளை தவிர்க்கவும். GROUP BYமற்றும்ORDER BY-ஐ மேம்படுத்தவும்.
- பொதுவாக்கம்/பொதுவாக்கம் இல்லாமை: பொதுவாக்கத்தை பயன்படுத்தி, மீறல்களை குறைக்க அல்லது சில சந்தர்ப்பங்களில், தரவை படிக்க வேகமாக்கும் வகையில், நகல் அல்லது கூட்டு பத்திகளை உருவாக்கி, பொதுவாக்கம் செய்யவும் (கவனமாக).
- பரிசீலனை முடிவுகளை கீச் செய்வது: பயன்பாட்டு நிலை அல்லது தரவுத்தளத்தின் கீச் அமைப்புகளை (எ.கா., Redis, Memcached) பயன்படுத்தி, அடிக்கடி கேட்கப்படும், குறைவான மாற்றங்கள் உள்ள தரவுகளை படிக்கும்போது சுமையை குறைக்க.
- தரவு தேர்வை கட்டுப்படுத்தல்:
LIMIT-ஐ பயன்படுத்தி, பக்கப்படுத்தல் அல்லது தேவையான பதிவுகளின் எண்ணிக்கையை மட்டும் தேர்வு செய்யவும். - கண்காணிப்பு மற்றும் சுயவிவரப்படுத்தல்: கண்காணிப்பு கருவிகளை (எ.கா., Percona Monitoring and Management, phpMyAdmin மற்றும் Slow Query Log) பயன்படுத்தி, மெதுவான கேள்விகளை கண்டறிதல்.
உதாரணம் — EXPLAIN-இன் மூலம் பகுப்பாய்வு:
// `status` பத்தியில் குறியீடு இல்லாமல் மெதுவான கேள்வி
SELECT * FROM orders WHERE status = 'pending' AND created_at < CURDATE();
// திட்டத்தை பகுப்பாய்வு
EXPLAIN SELECT * FROM orders WHERE status = 'pending' AND created_at < CURDATE();
// இது முழுமையான அட்டவணை சுருக்கத்தை (ALL) அல்லது பொருத்தமான குறியீடு பயன்படுத்தப்படாமையை காட்டலாம்.
// இரு பத்திகளுக்கும் கூட்டு குறியீடு சேர்க்க
CREATE INDEX idx_status_created_at ON orders (status, created_at);
// குறியீடு உருவாக்கப்பட்ட பிறகு மீண்டும் பகுப்பாய்வு
EXPLAIN SELECT * FROM orders WHERE status = 'pending' AND created_at < CURDATE();
// வகை (type) ref அல்லது range ஆக மாறும், மற்றும் Extra-ல் "Using where;" இருக்கும் என்று எதிர்பார்க்கப்படுகிறது.