سؤال

بالنظر إلى أن الفهرسة هو المهم حتى مجموعة البيانات الخاصة بك يزيد في الحجم ، يمكن للشخص شرح كيفية الفهرسة يعمل في قاعدة البيانات-الملحد ؟

للحصول على معلومات حول استعلامات مؤشر حقل, تحقق كيف يمكنني مؤشر قاعدة بيانات العمود.

هل كانت مفيدة؟

المحلول

لماذا هو المطلوب ؟

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

يرجع ذلك إلى حقيقة أن عددا من الوثائق لا يمكن إلا أن يتم فرز على حقل واحد ، يمكننا القول بأن البحث في الحقل الذي لا فرز يتطلب البحث الخطي الذي يتطلب N/2 كتلة يصل (في المتوسط) ، حيث N هو عدد من كتل الجدول يمتد.إذا كان هذا المجال هو غير حقل المفتاح (أيلا يحتوي على مقالات فريدة من نوعها) ثم كامل tablespace يجب أن يكون البحث في N كتلة بالوصول.

بينما مع فرز حقل البحث الثنائي يمكن استخدامها ، والتي قد log2 N كتلة بالوصول.أيضا منذ فرز البيانات غير حقل المفتاح بقية الجدول لا تحتاج إلى البحث عن قيم مكررة مرة أعلى من قيمة.وبالتالي زيادة أداء كبير.

ما هو فهرسة ؟

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

الجانب السلبي الفهرسة هو أن هذه المؤشرات تتطلب مساحة إضافية على القرص منذ مؤشرات يتم تخزينها معا في جدول باستخدام محرك MyISAM هذا الملف يمكن أن تصل بسرعة إلى حدود حجم الكامنة نظام الملفات إذا كان العديد من المجالات داخل نفس الجدول يتم فهرستها.

كيف يعمل ؟

أولا, دعونا مخطط قاعدة بيانات نموذج مخطط الجدول;

Field name       Data type      Size on disk
id (Primary key) Unsigned INT   4 bytes
firstName        Char(50)       50 bytes
lastName         Char(50)       50 bytes
emailAddress     Char(100)      100 bytes

ملاحظة:شار كانت تستخدم في مكان varchar للسماح دقيقة الحجم على القرص القيمة.هذا نموذج قاعدة البيانات يحتوي على خمسة ملايين الصفوف و هو غير معدلة.أداء العديد من الاستفسارات الآن سيتم تحليلها.هذه هي استعلام باستخدام معرف (أ فرز حقل المفتاح) واحد باستخدام الاسم الأول (غير الرئيسية التي لم يتم فرزها الميدانية).

مثال 1 - فرز مقابل الحقول التي لم يتم فرزها

نظرا لدينا نموذج قاعدة البيانات من r = 5,000,000 سجلات حجم ثابت إعطاء سجل طول R = 204 بايت و يتم تخزينها في جدول باستخدام محرك MyISAM التي تستخدم حجم الكتلة الافتراضي B = 1,024 بايت.حجب عامل من الجدول أن يكون bfr = (B/R) = 1024/204 = 5 سجلات لكل قرص كتلة.إجمالي عدد القطع المطلوبة لعقد طاولة N = (r/bfr) = 5000000/5 = 1,000,000 كتل.

البحث الخطي على حقل معرف يتطلب في المتوسط N/2 = 500,000 كتلة بالوصول إلى إيجاد قيمة ، بالنظر إلى أن معرف الحقل هو حقل المفتاح.ولكن منذ حقل معرف أيضا فرز ثنائي البحث يمكن أن تتم تتطلب المتوسط log2 1000000 = 19.93 = 20 كتلة بالوصول.على الفور يمكننا أن نرى هذا التحسن الكبير.

الآن الاسم الأول الحقل ولا فرز ولا حقل مفتاح, لذا بحث ثنائي مستحيل, ولا هي قيم فريدة من نوعها ، وبالتالي الجدول سوف تتطلب البحث إلى النهاية بالضبط N = 1,000,000 كتلة بالوصول.هذا هو الوضع الذي الفهرسة يهدف إلى تصحيح.

بالنظر إلى أن المؤشر سجل يحتوي فقط على فهرسة الحقل المؤشر إلى السجل الأصلي ، فإنه من المعقول أنه سيكون أصغر من متعدد سجل حقل أنه النقاط.وبالتالي فإن مؤشر في حد ذاته يتطلب أقل القرص كتل من الجدول الأصلي الذي يتطلب أقل كتلة يصل إلى تكرار خلال.المخطط مؤشر على الاسم الأول الميدان هو مبين أدناه ؛

Field name       Data type      Size on disk
firstName        Char(50)       50 bytes
(record pointer) Special        4 bytes

ملاحظة:المؤشرات في الخلية 2 ، 3 ، 4 أو 5 بايت في طول اعتمادا على حجم الجدول.

مثال 2 - الفهرسة

نظرا لدينا نموذج قاعدة البيانات من r = 5,000,000 السجلات مع فهرس سجل طول R = 54 بايت باستخدام حجم الكتلة الافتراضي B = 1,024 بايت.حجب عامل المؤشر سيكون bfr = (B/R) = 1024/54 = 18 سجلات لكل قرص كتلة.إجمالي عدد القطع المطلوبة لعقد مؤشر N = (r/bfr) = 5000000/18 = 277,778 كتل.

الآن البحث باستخدام الاسم الأول المجال يمكن الاستفادة من مؤشر إلى زيادة الأداء.يسمح هذا البحث الثنائية على مؤشر المتوسط log2 277778 = 18.08 = 19 كتلة بالوصول.للعثور على عنوان السجل الفعلي الذي يتطلب المزيد من منع الوصول إلى قراءة ، ليصل المجموع إلى 19 + 1 = 20 كتلة يصل ، بعيدة كل البعد عن 1 ، 000 ، 000 كتلة العدد المطلوب إيجاد الاسم الأول المباراة في غير المفهرسة الجدول.

متى يجب استخدامه ؟

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

منذ مؤشرات تستخدم فقط لتسريع البحث عن مطابقة الميدانية داخل السجلات ، فإنه من المعقول أن فهرسة الحقول استخدامها فقط من أجل إخراج سيكون مجرد مضيعة من مساحة القرص و وقت المعالجة عند القيام إدراج أو حذف العملية ، وبالتالي ينبغي تجنبها.أيضا بالنظر إلى طبيعة البحث الثنائية ، أصل أو تفرد من البيانات الهامة.الفهرسة على حقل مع أصل من 2 تقسيم البيانات إلى النصف ، في حين أصل 1000 سيعود حوالي 1000 السجلات.مع هذا المنخفض أصل فعالية يتم تخفيض خطي النوع ، للمحسن الاستعلام سوف تجنب استخدام مؤشر إذا كان أصل أقل من 30% من عدد قياسي, مما جعل مؤشر مضيعة للمساحة.

نصائح أخرى

أول مرة قرأت هذا كان من المفيد جدا بالنسبة لي.شكرا لك.

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

بيد أن تحديد موقعين مختلفين على الأقراص الصلبة مؤشر البيانات و بيانات الجدول يمكن أن تقلل من/القضاء على مشكلة زيادة تكلفة الوقت.وهذا يتطلب تعريف ملف إضافي مجموعات حسب الملفات على المطلوب الأقراص الصلبة و تعريف الجدول/index موقع كما تريد.

مشكلة أخرى مع الفهارس التشرذم هو مرور الوقت كما يتم إدخال البيانات. REORGANIZE يساعد ، يجب أن تكتب الروتينية للقيام بذلك.

في بعض السيناريوهات كومة هو أكثر فائدة من الجدول مع الفهارس ،

هـ.غرام:- إذا كان لديك الكثير من ينافس يكتب ولكن واحدة فقط كل ليلة على قراءة خارج ساعات العمل عن الإبلاغ.

كما التمايز بين متفاوت وغير فهارس متفاوتة المسافات هو مهم إلى حد ما.

ساعدني:- ماذا متفاوت وغير فهرس متفاوت المسافات في الواقع يعني ؟

فهرس مجرد هيكل البيانات أن يجعل البحث أسرع محدد العمود في قاعدة البيانات الخاصة بنا.هذا الهيكل هو عادة ب-شجرة أو تجزئة الجدول ولكن يمكن أن يكون أي منطق هيكل.

المثال الكلاسيكي "مؤشر في الكتب"

النظر في "الكتاب" من 1000 صفحة ، مقسوما على 100 أقسام ، كل قسم مع X صفحات.

بسيطة ؟

الآن, دون فهرس الصفحة للعثور على قسم معين أن يبدأ بحرف "S", لا يوجد لديك خيار آخر سوى المسح الضوئي من خلال الكتاب كله.أنا.هـ:1000 صفحة

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

ولكن بعد ذلك, بالإضافة إلى 1000 صفحة, سوف تحتاج آخر ~10 صفحات لعرض صفحة الفهرس ، لذلك تماما 1010 صفحة.

وهكذا ، فإن المؤشر هو قسم منفصل يخزن قيم عمود مفهرس + مؤشر إلى فهرسة الصف في ترتيب فرزها كفاءة look-ups.

أشياء بسيطة في المدارس ، أليس كذلك ؟ :P

لنفترض الآن أننا نريد تشغيل استعلام أن تجد كل التفاصيل في أي الموظفين الذين يتم تسمية 'Abc'?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

ما يمكن أن يحدث دون وجود المؤشر ؟

برنامج قواعد البيانات حرفيا يجب أن ننظر إلى كل صف في الجدول الموظف لمعرفة ما إذا كان Employee_Name هذا الصف 'Abc'.و لأننا نريد كل صف مع اسم 'اي بي سي' في داخله, لا يمكننا أن نتوقف عن النظر عندما نجد فقط صف واحد مع اسم 'اي بي سي' ، لأنه يمكن أن يكون هناك الصفوف الأخرى مع اسم Abc.لذلك ، كل صف حتى آخر صف يجب أن يكون البحث – وهو ما يعني الآلاف من الصفوف في هذا السيناريو يجب أن يتم فحصها من قبل قاعدة البيانات للعثور على الصفوف مع اسم 'Abc'.هذا هو ما يسمى الجدول الكامل الفحص

كيف بيانات مؤشر يمكن أن تساعد في الأداء

المغزى من وجود مؤشر لتسريع استعلامات البحث بشكل أساسي على خفض عدد السجلات/الصفوف في الجدول التي تحتاج إلى فحص.فهرس هو بنية البيانات (الأكثر شيوعا شجرة B) التي تخزن قيم محددة عمود في الجدول.

كيف ب-الأشجار مؤشر العمل ؟

السبب ب - الأشجار الأكثر شعبية البيانات هيكل فهارس يرجع إلى حقيقة أنها هي الوقت بكفاءة – لأن look-ups الحذف والإدراج يمكن القيام به في لوغاريتمي الوقت.و سبب رئيسي آخر ب - الأشجار هي أكثر شيوعا بسبب البيانات التي يتم تخزينها داخل ب - شجرة يمكن فرزها.RDBMS عادة يحدد هيكل البيانات المستخدمة فعليا على فهرس.ولكن في بعض الحالات مع بعض RDBMS ، في الواقع يمكنك تحديد بنية البيانات التي تريد قاعدة البيانات الخاصة بك لاستخدامها عند إنشاء الفهرس نفسها.

كيف جدول تجزئة مؤشر العمل ؟

السبب في تجزئة المؤشرات المستخدمة لأن الجداول التجزئة هي فعالة للغاية عندما يتعلق الأمر فقط يبحث القيم.لذا الاستفسارات التي تقارن المساواة إلى سلسلة يمكن استرداد قيم سريع جدا إذا كانت تستخدم تجزئة مؤشر.

على سبيل المثال, الاستعلام ناقشنا في وقت سابق أن تستفيد من تجزئة مؤشر إنشاؤها على Employee_Name العمود.طريقة تجزئة مؤشر أن العمل هو أن قيمة العمود سوف يكون المفتاح في جدول التجزئة القيمة الفعلية تعيين هذا المفتاح سيكون مجرد مؤشر إلى صف البيانات في الجدول.منذ جدول تجزئة هو في الأساس مجموعة النقابي ، نموذجية دخول ننظر بشيء من مثل "Abc => 0x28939" ، حيث 0x28939 هو إشارة إلى صف الجدول حيث يتم تخزينها في الذاكرة.البحث عن قيمة مثل "اي بي سي" في جدول تجزئة مؤشر على العودة إشارة إلى الصف في الذاكرة ومن الواضح أن الكثير أسرع من مسح الجدول للعثور على جميع الصفوف مع قيمة "اي بي سي" في Employee_Name العمود.

مساوئ تجزئة مؤشر

الجداول التجزئة لا يتم فرز هياكل البيانات, و هناك أنواع عديدة من الاستفسارات التي تجزئة مؤشرات لا يمكن أن تساعد حتى مع.على سبيل المثال, افترض أنك تريد معرفة جميع الموظفين الذين هم أقل من 40 عاما.كيف يمكنك أن تفعل ذلك مع جدول تجزئة المؤشر ؟ حسنا, هذا غير ممكن لأن تجزئة الجدول هو فقط جيدة للبحث عن أزواج قيمة المفتاح – مما يعني الاستفسارات التي تحقق المساواة

ما هو بالضبط داخل قاعدة بيانات المؤشر ؟ الآن أنت تعرف أن قاعدة البيانات إنشاء فهرس على عمود في الجدول ، أن مؤشر يخزن القيم في ذلك العمود.ولكن من المهم أن نفهم أن بيانات مؤشر لا تخزين القيم في الأعمدة الأخرى من نفس الجدول.على سبيل المثال, إذا كنا إنشاء فهرس على Employee_Name العمود ، وهذا يعني أن Employee_Age و Employee_Address قيم العمود يتم تخزينها أيضا في الفهرس.إذا قمنا بتخزين كافة الأعمدة الأخرى في المؤشر ، ثم سيكون تماما مثل إنشاء نسخة أخرى من الجدول بأكمله والتي سوف يستغرق الكثير من الفضاء وسوف تكون فعالة جدا.

كيف قاعدة بيانات تعرف متى تستخدم المؤشر ؟ عندما استعلام مثل "حدد * من الموظف حيث Employee_Name = 'Abc' " تشغيل قاعدة البيانات سوف تحقق لمعرفة ما إذا كان هناك مؤشر على العمود(الأعمدة) التي يتم الاستعلام عنها.على افتراض Employee_Name عمود لديها مؤشر إنشاؤها على قاعدة البيانات يجب أن تقرر ما إذا كان في الواقع المنطقي أن استخدام مؤشر للعثور على القيم التي يتم البحث عنها – لأن هناك بعض السيناريوهات حيث هو في الواقع أقل كفاءة استخدام قاعدة البيانات مؤشر وأكثر كفاءة فقط لمسح الجدول بأكمله.

ما هي تكلفة وجود قاعدة بيانات المؤشر ؟

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

كقاعدة عامة, فهرس يجب إنشاء فقط على الطاولة إذا كانت البيانات في عمود مفهرس سيتم الاستعلام في كثير من الأحيان.

انظر أيضا

  1. ما أعمدة عموما جيدة الفهارس?
  2. كيف فهارس قاعدة البيانات العمل

بسيطة الوصف!!!!!!!!!!

مؤشر ليست سوى بنية البيانات الذي يقوم بتخزين قيم محددة عمود في الجدول.وهو إنشاء فهرس على عمود من الجدول.

على سبيل المثال لدينا جدول قاعدة بيانات تسمى المستخدم مع ثلاثة أعمدة – الاسم والعمر والعنوان.نفترض أن المستخدم الجدول الآلاف من الصفوف.

لنفترض الآن أننا نريد تشغيل استعلام للعثور على جميع تفاصيل أي من المستخدمين الذين يتم اسمه "يوحنا".إذا كنا تشغيل الاستعلام التالي.

SELECT * FROM User 
WHERE Name = 'John'

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

CREATE INDEX name_index
ON User (Name)

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

سريعة فقط اقتراح..كما الفهرسة تكاليف إضافية يكتب و مساحة تخزين حتى إذا كان التطبيق الخاص بك يتطلب المزيد من إدراج/تحديث العملية ، قد ترغب في استخدام الجداول دون الفهارس ، ولكن إذا كان يتطلب المزيد من البيانات واسترجاعها العمليات ، عليك أن تذهب للحصول على فهرستها من الجدول.

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

وباختصار ، فإن مؤشر هو بنية البيانات الذي يقوم بتخزين قيم محددة عمود في الجدول وذلك لتسريع استعلام البحث.

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