مفهوم الرويد:
Rowid هو عمود زائف نظرًا لأنه عمود زائف، لا يتم تعريف هذا العمود بواسطة المستخدم، ولكن تتم إضافته بواسطة النظام نفسه. يوجد عمود زائف صفي لكل جدول، لكن قيمة عمود ROWID لا يتم تخزينها فعليًا في الجدول. ومع ذلك، يمكنك استخدامه مثل أي عمود آخر، ولكن لا يمكنك حذف العمود أو تغييره، ولا يمكنك تعديل أو إدراج قيمة العمود. بمجرد إدراج صف من البيانات في قاعدة البيانات، يكون الصف فريدًا أثناء دورة حياة الصف، أي أنه حتى لو خضع الصف لترحيل الصف، فلن يتغير الصف.
لماذا استخدام ROWID
يوفر Rowid أسرع طريقة للوصول إلى صف معين في الجدول، ويمكن تحديد موقع كتلة البيانات المقابلة مباشرة من خلال ROWID ثم قراءتها في الذاكرة. عندما نقوم بإنشاء فهرس، لا يقوم الفهرس بتخزين قيمة عمود الفهرس فحسب، بل يخزن أيضًا ROWID للصف المقابل لقيمة الفهرس، وبهذه الطريقة، بعد العثور بسرعة على ROWID للصف المقابل من خلال الفهرس، يمكننا الاستعلام بسرعة عن البيانات من خلال ROWID. ولهذا السبب يكون أسرع عندما نستخدم استعلامات الفهرس.
في الإصدارات السابقة من ORACLE8، كان ROWID يتكون من FILE وBLOCK وROW NUMBER. مع توسيع مفهوم الكائن في Oracle8، تغير ROWID إلى OBJECT وFILE وBLOCK وROW NUMBER. يمكنك استخدام DBMS_ROWID لتحليل الصف إلى الأجزاء المذكورة أعلاه، أو يمكنك دمج الأجزاء المذكورة أعلاه في صف صالح.
مفهوم SQL العودي في بعض الأحيان لتنفيذ عبارة SQL الصادرة عن المستخدم، يجب على Oracle تنفيذ بعض العبارات الإضافية. نسمي هذه العبارات الإضافية "استدعاءات متكررة" أو "عبارات SQL متكررة". على سبيل المثال، عند إصدار عبارة DDL، تقوم ORACLE دائمًا بإصدار بعض عبارات SQL المتكررة ضمنيًا لتعديل معلومات قاموس البيانات حتى يتمكن المستخدم من تنفيذ عبارة DDL بنجاح. تحدث الاستدعاءات العودية غالبًا عندما لا تكون معلومات قاموس البيانات المطلوبة موجودة في الذاكرة المشتركة. تقوم هذه الاستدعاءات العودية بقراءة معلومات قاموس البيانات من القرص الثابت إلى الذاكرة. لا يهتم المستخدمون بتنفيذ عبارات SQL المتكررة هذه، حيث ستقوم ORACLE تلقائيًا بتنفيذ هذه العبارات داخليًا عند الحاجة. بالطبع، قد تتسبب كل من عبارات DML وSELECT في حدوث SQL متكرر. ببساطة، يمكننا التفكير في المشغلات على أنها SQL متكررة.
مصدر الصف
عند استخدامها في الاستعلامات، يمكن أن تكون مجموعة الصفوف المؤهلة التي تم إرجاعها بواسطة العملية السابقة عبارة عن مجموعة من جميع بيانات الصف في الجدول؛ ويمكن أن تكون أيضًا مجموعة من بيانات الصف الجزئية في الجدول؛ مصادر الصف: مجموعة من بيانات الصف التي تم الحصول عليها بعد عملية الاتصال (مثل ربط الاتصال).
المسند
WHERE القيود في الاستعلام
طاولة القيادة
ويسمى هذا الجدول أيضًا الجدول الخارجي (OUTER TABLE). يتم استخدام هذا المفهوم في عمليات الانضمام المتداخلة والتجزئة. إذا قام مصدر الصف بإرجاع المزيد من بيانات الصف، فسيكون لذلك تأثير سلبي على كافة العمليات اللاحقة. لاحظ أنه على الرغم من ترجمة هذا على أنه جدول القيادة، إلا أنه يتم ترجمته بشكل أكثر دقة كمصدر صف القيادة. بشكل عام، بعد تطبيق قيود الاستعلام، يتم إرجاع الجدول الذي يحتوي على عدد أقل من مصادر الصفوف كجدول القيادة، لذلك، إذا كان هناك جدول كبير به قيود (مثل قيود المساواة) في شرط WHERE، فسيتم استخدام الجدول الكبير أيضًا كجدول القيادة. الجدول مناسب، لذلك لا يمكن استخدام الجداول الأصغر فقط كجداول قيادة. يجب أن تكون العبارة الصحيحة هي أنه بعد تطبيق قيود الاستعلام، يتم استخدام الجدول الذي يُرجع عددًا أقل من مصادر الصفوف كجدول قيادة. في خطة التنفيذ، ينبغي أن يكون مصدر الصف العلوي وسيتم إعطاء تعليمات محددة في وقت لاحق. في وصفنا اللاحق، يُشار إلى هذا الجدول عمومًا بمصدر الصف 1 لعملية الربط.
جدول التحقيق (جدول التحقيق)
يُسمى هذا الجدول أيضًا بالجدول الداخلي (INNER TABLE). بعد أن نحصل على صف معين من البيانات من جدول السائقين، فإننا نبحث عن الصفوف في الجدول التي تستوفي شروط الانضمام. لذلك يجب أن يكون الجدول جدولًا كبيرًا (في الواقع يجب أن يكون جدولًا يُرجع مصدر صف أكبر) ويجب أن تكون هناك فهارس على الأعمدة المقابلة. في وصفنا اللاحق، يُشار إلى هذا الجدول عمومًا بمصدر الصف 2 لعملية الربط.
الفهرس المدمج (الفهرس المتسلسل)
فهرس يتكون من عدة أعمدة، مثل إنشاء فهرس idx_emp على emp(col1, col2, col3, ...) ثم نسمي فهرس idx_emp فهرسًا مركبًا. هناك مفهوم مهم في الفهرس المدمج: العمود السابق في المثال أعلاه، العمود col1 هو العمود السابق. عندما نقوم بإجراء استعلام، يمكننا استخدام "where col1 = ؟" أو "where col1 = ? and col2 = ؟". مثل هذه القيود ستستخدم الفهرس، لكن الاستعلام "where col2 = ؟" لذلك، فقط عندما يتم تضمين العمود البادئ في القيد، سيتم استخدام الفهرس المدمج للتقييد.
الانتقائية:
إن مقارنة عدد المفاتيح الفريدة في العمود بعدد الصفوف في الجدول يحدد انتقائية العمود. إذا كانت نسبة "عدد المفاتيح الفريدة / عدد الصفوف في الجدول" للعمود أقرب إلى 1، تكون انتقائية العمود أعلى، ويكون العمود أكثر ملاءمة لإنشاء فهرس، وانتقائية الفهرس هو أيضا أعلى. عند الاستعلام عن أعمدة قابلة للتحديد بشكل كبير، سيتم إرجاع بيانات أقل، لذا تكون استعلامات الفهرس أكثر ملاءمة.
ومع توفر هذه المعرفة الأساسية، نبدأ في تقديم خطة التنفيذ. من أجل تنفيذ بيان، قد يتعين على Oracle تنفيذ العديد من الخطوات. قد تتمثل كل خطوة من هذه الخطوات في استرداد صفوف البيانات فعليًا من قاعدة البيانات أو إعدادها بطريقة ما لاستخدامها من قبل المستخدم الذي يصدر البيان. يُطلق على مجموعة هذه الخطوات التي تستخدمها Oracle لتنفيذ عبارة خطة التنفيذ. تعد خطة التنفيذ الجزء الأكثر تعقيدًا وأهمية في تحسين SQL. فقط من خلال معرفة كيفية تنفيذ ORACLE لعبارة SQL داخليًا، يمكننا معرفة ما إذا كانت خطة التنفيذ التي حددها المحسن هي الأمثل. تعتبر خطط التنفيذ مهمة بالنسبة لمسؤولي قواعد البيانات مثل أهمية البيانات المالية للموظفين الماليين. لذا فإن المشاكل الرئيسية التي نواجهها هي: كيفية الحصول على خطة التنفيذ؛ كيفية تحليل خطة التنفيذ لمعرفة المشاكل الرئيسية التي تؤثر على الأداء. وفيما يلي سوف نبدأ بتحليل خطة التنفيذ الشجرة، ثم التعريف بكيفية الحصول على خطة التنفيذ، ومن ثم التعريف بكيفية تحليل خطة التنفيذ.
مثال:
يوضح هذا المثال خطة التنفيذ لعبارة SQL التالية.
حدد الاسم، الوظيفة، سال، dname
من emp، قسم
حيث emp.deptno = derpt.deptno
وغير موجود
(يختار *
من سالجراد
حيث emp.sal بين Losal وhisal );
يستفسر هذا البيان عن الاسم والوظيفة والراتب واسم القسم لجميع الموظفين الذين لا تقع رواتبهم ضمن أي من نطاقات الرواتب الموصى بها.
هذه المقالة مأخوذة من مدونة CSDN، يرجى الإشارة إلى المصدر عند إعادة الطباعة: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044672.aspx.