عزيزي
لدي بعض النصائح
أولا: عليك تلاشي تكرار اسماء الحقول في جميع الجداول.
وذلك لأنه سيسهل ويمكن عملية ربط الجداول ببعضها البعض كما سنرى
ثانيا: عليك ربط جداول قاعدة البيانات ببعضها البعض.
واقصد بالرابط ان يكون هناك حقل في كل الجداول التي تعتقد انها مترابطه، يربط بالجدول الاخر
مثال.. ان كان لدينا جدولان الاول للاقسام والاخر للمنتجات..
فلابد من وضع حقل في جدول المنتجات يرمز الى القسم الذي ينتمي له في جدول الاقسام
لاحظ أن هذا ليس فقط لمعرفة ان المنتج س ينتمي للقسم ص.. وانما لتقليل الاستعلام كما سنرى
ثالثا: عليك التخلي عن الاستعلامات الفرديه طالما كان بالامكان ربطهم ببعض.
فمثلا في المثال السابق.. إن اردت برمجة صفحه لتعرض 5 منتجات مع بيان اسماء اقسامهم..
فإن الحل التقليدي يكون بعمل التالي..
الاول هو استعلام عن جدول المنتجات
كود PHP:
"SELECT prod_name,cat_id FROM products LIMIT 5"
ومن ثم نعمل استعلام اخر لكل منتج نستعلم فيه عن اسم القسم الذي ينتمي اليه من جدول الاقسام من خلال الحقل الذي تم جلبه من جدول المنتجات ولنفرض ان اسمه هو cat_id ونحن مازلنا في حلقة التكرار
كود PHP:
"SELECT cat_name FROM categories WHERE cat_id=$cat_id"
وبهذا يكون عدد الاستعلامات
1 من جدول المنتجات
5 من جدول الاقسام
ليصبح المجموع 6 استعلامات لكل زائر يقوم بزيارة تلك الصفحه..
فتخيل ان زار تلك الصفحه 10 اشخاص في نفس الوقت.. فسيكون مجموع الاستعلامات هو 6 * 10 = 60 استعلام..
مع العلم انه من الممكن دمج تلك الاستعلامات باستعلام واحد فقط..
اليك الطريقة
نعلم انه الحقل الذي يربط جدول المنتجات بجدول الاقسام هو حقل الـ cat_id اذا فسيكون الاستعلام كالتالي
كود PHP:
"SELECT DISTINCT a.prod_name, b.cat_name FROM products a, categories b WHERE a.cat_id=b.cat_id LIMIT 5"
في هذا الاستعلام.. قمنا بكتابة جميع الحقول التي نريد جلبها وهم prod_name و cat_name (مع العلم انهم من جداول مختلفه.. اي لا ينتمون لنفس الجدول)
ولكي نخبر الخادم بأنهم حقول ذات جداول مختلفه.. قمنا بكتابة a و b وهي حروف اختياريه لكي نفرقهم عن بعض..
وبعد ذلك اخبرناه اننا نقصد بالحقول التي يسبقها حرف الـ a انها تنتمي لجدول المنتجات وحرف ال b انها للاقسام بكتابة التالي FROM products a, categories b
واخبرناه بالشرط الذي نريده.. وهو ان يعرض اسم قسم المنتج الذي تم جلبه بكتابة التالي WHERE a.cat_id=b.cat_id اي اننا نشترط ان تكون قيمة حقل ال cat_id الموجود في جدول المنتجات
مطابقه لقيمة حقل ال cat_id الموجود في جدول الاقسام
واخيرا قمنا بتحديد عدد الصفوف المراد جلبها بكتابة LIMIT 5
وبتطبيق الفرض السابق.. 10 زوار لنفس الصفحه فسيكون مجموع الاستعلامات هو 10 استعلامات بدلا عن 60..
اي اننا قمنا بتوفير 60 - 10 = 50 استعلام غير ضروري...
رابعا: تلاشى قدر الامكان اوامر ال JOIN (left, right...).
وذلك بسبب الوقت الكبير الذي تستغرقه في عملية الربط.. لأنها تقوم بانشاء جدول اخر مؤقت..
خامسا: استخدم نظام ال cache.
بما أن الـ 10 استعلامات قد تصل الى 100 او اكثر.. فمازلنا نواجه مشكله ضغط الاستعلامات
ولحل تلك المشكله.. علينا استخدام نظام الذاكرة المؤقته.. وذلك لكي نتلاشى فكرة عمل استعلام
في كل مرة يتم زيارة تلك الصفحه الى ان يتم تحديث بيانات الجدول وبذلك نقوم بعمل استعلام واحد فقط
وبهذا نكون قد حللنا مشكلة كثرة الاستعلامات.. لأننا في الواقع لا نقوم بالاستعلام عنها.. بل نقوم بعرضها
من ملف قمنا بجلب محتوياته من القاعده عندما تم تحديثها وقمنا بتخزينه ليتم استدعائه في كل مرة نستدعي
تلك الصفحه عوضا عن عمل استعلام من القاعده والضغط عليها..
سادسا: كما للـ mysql_pconnect حسنات لها عيوب.
اجمل ما في تلك الداله هو انها لا تقوم بعمل اتصال مع القاعده لكل زائر.. وانما قبل ان تقوم بعمل ذلك الاتصال تقوم بالبحث عن اية اتصالات مفتوحه لتقم بالاعتماد عليها وتجلب عن طريقها البيانات المستعلم عنها
ولكن لا يمكن قفلها بالداله mysql_close()
ولمعرفة المزيد عن عيوبها راجع التعليقات الموجوده هنا PHP: mysql_pconnect - Manual
فان لم تكن عيوبها تسبب لك اي مشكله.. انصحك بها
اخيرا
اتمنى ان اكون قد أفدتك
بالتوفيق..