سؤال

أنا أكتب بعض DB الروتين و أنا باستخدام البيانات المعدة.بيئتي شركة تنمية نفط عمان مع PHP5.

أنا أفهم إعداد البيانات في المقام الأول تقديم أداء فائدة ، وكذلك بعض المساعدة المكافآت مثل عدم الاضطرار إلى يدويا SQL-الهروب من إدخال البيانات.

سؤالي هو حول أداء جزء.

لدي اثنين من تطبيقات من getPrice وظيفة دون أن يأخذ معرف المنتج و يعود سعره.

getPrice_A إعادة استعمال نفس PDOStatement الكائن عبر المكالمات اللاحقة ضمن نفس البرنامج النصي.هذا ضروري أو الموصى بها ؟ إذا كان الأمر كذلك ، هل هناك أي طريقة لتجنب تكرار هذا رمز إضافية عبر كل واحد الحصول على*() في كل نموذج ؟

getPrice_B يخلق جديد PDOStatement كائن في كل مكالمة.سوف DBMS التعرف على هذا البيان وقد تم بالفعل إعداد ويكون لا يزال قادرا على تخطي بعض العمل ؟ وبعبارة أخرى ، هل هذا التنفيذ بشكل صحيح الاستفادة من مزايا الأداء من إعداد البيانات ؟

بعد أن كتبت كل هذا و قراءة أكثر من ذلك ، لم تتخيل getPrice_B بخير و getPrice_A هو توفير ضئيلة الفائدة على أعلى من ذلك ، والتي قد أو قد لا يكون يستحق المزيد من المضاعفات.

أنا لا تزال ترغب في سماع بالتأكيد لابد من الاطلاع على الرغم من.

نفترض أن $pdo هو صحيح متصل شركة تنمية نفط عمان الكائن في الأمثلة أدناه.

<?php
class Product {
    static function &getPrice_A($id) {
        static $stmt;
        if (!$stmt) {
            $stmt = $pdo->prepare('SELECT price FROM products WHERE id = ?');
        }
        $stmt->execute(array($id));
        return $stmt->fetchColumn(0);
    }

    static function &getPrice_B($id) {
        $stmt = $pdo->prepare('SELECT price FROM products WHERE id = ?');
        $stmt->execute(array($id));
        return $stmt->fetchColumn(0);
    }
}

// example usage:
$price = Product::getPrice(4982);
echo "Product 4982 costs $price\n";
هل كانت مفيدة؟

المحلول

من ما أفهم إعداد البيانات إعادة استخدام SQL التي تم إنشاؤها خطة إذا كان هذا هو نفس البيان ، لذلك قاعدة البيانات سوف نرى نفس إعداد بيان يكن لديك للقيام بهذا العمل لمعرفة كيفية الاستعلام عن قاعدة البيانات.أود أن أقول العمل الإضافي من إنقاذ إعداد البيان في Product::getPrice_A ليس من عادة مفيدة جدا ، أكثر لأنه يمكن أن تحجب مدونة بدلا من قضية الأداء.عند التعامل مع الأداء, أشعر أنه من الأفضل دائما أن تركز على رمز الوضوح ثم الأداء عندما يكون لديك الحقيقي الإحصاءات التي تشير إلى وجود مشكلة.

أود أن أقول "نعم ، أعمال اضافية لا لزوم لها" (بغض النظر عما إذا كان حقا يعزز الأداء).أيضا, أنا لست كبيرة جدا الخبراء ديسيبل ، ولكن الأداء مكاسب إعداد البيانات هو شيء سمعته من الآخرين, و هو في مستوى قاعدة البيانات ، وليس رمز المستوى (حتى إذا كان رمز هو في الواقع الاحتجاج معلمات بيان على الفعلية ديسيبل ، ثم ديسيبل يمكن أن تفعل هذه خطة التنفيذ المؤقت...ولو اعتمادا على قاعدة البيانات ، يمكنك الحصول على فائدة حتى من دون معلمات البيان).

على أي حال, إذا كنت قلقا حقا حول (رؤية) أداء قاعدة البيانات القضايا ، يجب أن ننظر إلى التخزين المؤقت الحل...من الذي أود أن أوصي أعطها.مع مثل هذا الحل ، يمكنك ذاكرة التخزين المؤقت الاستعلام النتائج و لا حتى ضرب قاعدة بيانات الأشياء التي يمكنك الوصول إليها بشكل متكرر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top