Sobes.tech
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;" இருக்கும் என்று எதிர்பார்க்கப்படுகிறது.