استخدم الفهرس يا لوقا! › التحديث 54 / 139 السابق التالي

التحديث

يجب على عبارة update أن تنقل مدخلات الفهرس المتغيّرة إلى مواضع جديدة للحفاظ على ترتيب الفهرس. ولهذا، يجب على قاعدة البيانات أن تحذف المدخل القديم وتضيف المدخل الجديد في الموضع الجديد. وزمن الاستجابة هو في الأساس نفس زمن عبارتَي delete وinsert المقابلتين مجتمعتين.

ويعتمد أداء update، شأنه شأن insert وdelete، على عدد الفهارس على الجدول أيضاً. والفرق الوحيد أن عبارات update لا تؤثر بالضرورة في جميع الأعمدة؛ لأنها كثيراً ما تعدّل أعمدة قليلة مختارة فقط. وبناءً على ذلك، لا تؤثر عبارة update بالضرورة في جميع فهارس الجدول، بل في تلك التي تحتوي على الأعمدة المحدَّثة فقط.

يعرض الشكل 8.3 زمن الاستجابة لعبارتَي update: الأولى تضبط جميع الأعمدة فتؤثر في كل الفهارس، ثم الثانية تحدّث عموداً واحداً فلا تؤثر إلا في فهرس واحد.

الشكل 8.3 أداء التحديث حسب الفهارس وعدد الأعمدة

يُظهر update على جميع الأعمدة النمط نفسه الذي لاحظناه في المقاطع السابقة: إذ يزداد زمن الاستجابة مع كل فهرس إضافي. أما زمن استجابة عبارة update التي تؤثر في فهرس واحد فقط فلا يزداد بهذا القدر؛ لأنها تترك معظم الفهارس دون تغيير.

لتحسين أداء update، عليك أن تحرص على تحديث الأعمدة التي تغيّرت فقط. وهذا بيّن إذا كتبت عبارة update يدوياً. أما أدوات ORM فقد تولّد عبارات update تضبط جميع الأعمدة في كل مرة. ويفعل Hibernate ذلك، على سبيل المثال، عند تعطيل وضع التحديث الديناميكي. ومنذ الإصدار 4.0، هذا الوضع مُفعَّل افتراضياً.

عند استخدام أدوات ORM، من الممارسات الجيدة تمكين تسجيل الاستعلامات (query logging) أحياناً في بيئة التطوير للتحقق من عبارات SQL المولَّدة. وتحتوي النصيحة المعنونة «تمكين تسجيل SQL» على نظرة موجزة عن كيفية تمكين تسجيل SQL في بعض أدوات ORM الشائعة الاستخدام.

فكّر في الأمر

هل يمكنك التفكير في حالة لا تؤثر فيها عبارات insert أو delete في جميع فهارس الجدول؟