PHP Academy · पाठ

डेटाबेस क्वेरी का अनुकूलन

N+1 क्वेरी पहचानें, इंडेक्स जोड़ें और क्वेरी की संख्या घटाएँ

पाठ 3, कुल 4 में से12 चरण

डेटाबेस क्वेरी का अनुकूलन, CoddyKit पर PHP Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह PHP Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

धीमी क्वेरी पहचानना

MySQL की धीमी क्वेरी लॉग सक्षम करें और एक सीमा निर्धारित करें। अपेक्षा से अधिक समय लेने वाली क्वेरी की समीक्षा करें।

# my.cnf:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5  # log queries over 500ms

EXPLAIN / EXPLAIN ANALYZE

MySQL किसी क्वेरी को कैसे निष्पादित करता है और इंडेक्स का उपयोग होता है या नहीं, यह समझने के लिए EXPLAIN का उपयोग करें।

-- Run in MySQL:
EXPLAIN SELECT * FROM orders WHERE user_id = 42 AND status = "pending";
-- Look for: type=ALL (full scan), key=NULL (no index used)

इंडेक्स जोड़ना

इंडेक्स फ़िल्टर किए गए और क्रमबद्ध किए गए कॉलम से पढ़ने की गति को बहुत बढ़ा देते हैं।

-- Add composite index for the query above:
ALTER TABLE orders ADD INDEX idx_user_status (user_id, status);

// In Laravel migration:
$table->index(["user_id", "status"]);

N+1 क्वेरी समस्या

N+1 समस्या में सूची प्राप्त करने के लिए एक क्वेरी और संबंध के प्रत्येक आइटम के लिए एक-एक क्वेरी चलती है। इसे ईगर लोडिंग से ठीक करें।

<?php
// BAD: 1 + N queries
$posts = Post::all();
foreach ($posts as $post) echo $post->author->name;

// GOOD: 2 queries
$posts = Post::with("author")->get();
foreach ($posts as $post) echo $post->author->name;

केवल आवश्यक कॉलम चुनना

SELECT * से बचें — मेमोरी उपयोग और नेटवर्क स्थानांतरण कम करने के लिए केवल आवश्यक कॉलम प्राप्त करें।

<?php
// Bad:
$users = User::all();

// Good:
$users = User::select("id", "name", "email")->get();

बड़े डेटासेट को खंडों में बाँटना

मेमोरी समाप्त होने से बचने के लिए बड़े परिणाम-समुच्चयों को खंडों में संसाधित करें।

<?php
User::chunk(500, function ($users) {
    foreach ($users as $user) {
        // process each user
    }
});

// Or lazy loading (PHP generator):
User::lazy()->each(fn($user) => processUser($user));

क्वेरी कैशिंग

ऐसे महँगे एग्रीगेशन और रिपोर्ट कैश करें जो बार-बार नहीं बदलते।

<?php
$revenue = Cache::remember("monthly-revenue", 3600, function () {
    return Order::whereMonth("created_at", now()->month)->sum("total");
});

लूप में क्वेरी चलाने से बचें

लूप के अंदर कभी भी क्वेरी न चलाएँ। पहले आईडी एकत्र करें, फिर एक ही क्वेरी में डेटा प्राप्त करें।

<?php
// Collect all product IDs:
$ids = array_column($cartItems, "product_id");
// One query:
$products = Product::whereIn("id", $ids)->get()->keyBy("id");

foreach ($cartItems as $item) {
    $product = $products[$item["product_id"]];
}

डेटाबेस कनेक्शन पूलिंग

PHP-FPM प्रत्येक वर्कर के लिए एक नया PDO कनेक्शन बनाता है। PgBouncer या ProxySQL कनेक्शनों का पूल बना सकते हैं, जिससे कनेक्शन बनाने के ओवरहेड से डेटाबेस पर अत्यधिक भार नहीं पड़ता।

कवरिंग इंडेक्स

कवरिंग इंडेक्स में क्वेरी पूरी करने के लिए आवश्यक सभी कॉलम शामिल होते हैं — MySQL मुख्य तालिका की पंक्तियों तक पहुँचे बिना केवल इंडेक्स से क्वेरी का उत्तर दे सकता है।

सारांश

धीमी क्वेरी लॉग सक्षम करें। गायब इंडेक्स खोजने के लिए EXPLAIN का उपयोग करें। संबंधों को ईगर-लोड करें। केवल आवश्यक कॉलम चुनें। बड़े डेटासेट को खंडों में बाँटें। महँगे एग्रीगेशन कैश करें। लूप के अंदर क्वेरी चलाने से बचें।

त्वरित जाँच

N+1 क्वेरी समस्या क्या है?

शुरुआत निःशुल्क

एआई शिक्षक के साथ PHP सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
49
पाठ
195

अक्सर पूछे जाने वाले प्रश्न

क्या “डेटाबेस क्वेरी का अनुकूलन” पाठ निःशुल्क है?

हाँ—“डेटाबेस क्वेरी का अनुकूलन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और PHP Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“डेटाबेस क्वेरी का अनुकूलन” में मैं क्या सीखूँगा?

N+1 क्वेरी पहचानें, इंडेक्स जोड़ें और क्वेरी की संख्या घटाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PHP Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या PHP Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PHP Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“डेटाबेस क्वेरी का अनुकूलन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस PHP Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर PHP Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Xdebug से PHP की प्रोफ़ाइलिंग
  2. OPcache: बाइटकोड कैशिंग
  3. डेटाबेस क्वेरी का अनुकूलन
  4. मेमोरी प्रबंधन और प्रदर्शन सुझाव
← PHP Academy पर वापस जाएँ