MySQL البرنامج التعليمي للفهرس - الإنشاء والإضافة والإسقاط
ما هو الفهرس؟
الفهارس في MySQL فرز البيانات بطريقة تسلسلية منظمة. يتم إنشاؤها على الأعمدة التي سيتم استخدامها لتصفية البيانات. فكر في الفهرس كقائمة مرتبة أبجديًا. من الأسهل البحث عن الأسماء التي تم فرزها حسب الترتيب الأبجدي مقارنة بالأسماء التي لم يتم فرزها.
يمكن أن يؤدي استخدام فهرس على الجداول التي يتم تحديثها بشكل متكرر إلى ضعف الأداء. هذا بسبب MySQL ينشئ كتلة فهرس جديدة في كل مرة تتم فيها إضافة البيانات أو تحديثها في الجدول. بشكل عام، يجب استخدام الفهارس في الجداول التي لا تتغير بياناتها بشكل متكرر ولكنها تستخدم كثيرًا في استعلامات البحث المحددة.
ما استخدام الفهرس؟
لا أحد يحب الأنظمة البطيئة. يعد الأداء العالي للنظام ذا أهمية قصوى في جميع أنظمة قواعد البيانات تقريبًا. تستثمر معظم الشركات بكثافة في الأجهزة بحيث تكون عمليات استرجاع البيانات ومعالجتها أسرع. ولكن هناك حدود للاستثمارات في الأجهزة التي يمكن أن تقوم بها الشركة. يعد تحسين قاعدة البيانات الخاصة بك حلاً أرخص وأفضل.
عادة ما يكون البطء في وقت الاستجابة بسبب تخزين السجلات بشكل عشوائي في جداول قاعدة البيانات. يجب أن تقوم استعلامات البحث بالتكرار عبر السجلات المخزنة عشوائيًا بالكامل واحدًا تلو الآخر لتحديد موقع البيانات المطلوبة. يؤدي هذا إلى ضعف أداء قواعد البيانات عندما يتعلق الأمر باسترداد البيانات من الجداول الكبيرة. ومن ثم، يتم استخدام الفهارس لفرز البيانات لتسهيل البحث.
بناء الجملة: إنشاء فهرس
يمكن تعريف الفهارس بطريقتين
- أثناء إنشاء الجدول
- بعد إنشاء الجدول
على سبيل المثال:
بالنسبة لـ myflixdb الخاص بنا، نتوقع الكثير من عمليات البحث في قاعدة البيانات بالاسم الكامل.
سنضيف عمود "الأسماء_الكاملة" إلى الفهرس في الجدول الجديد ""أعضاء_فهرستهم"."
يساعدنا البرنامج النصي الموضح أدناه على تحقيق ذلك.
CREATE TABLE `members_indexed` ( `membership_number` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(150) DEFAULT NULL, `gender` varchar(6) DEFAULT NULL, `date_of_birth` date DEFAULT NULL, `physical_address` varchar(255) DEFAULT NULL, `postal_address` varchar(255) DEFAULT NULL, `contact_number` varchar(75) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`membership_number`),INDEX(full_names) ) ENGINE=InnoDB;
قم بتنفيذ البرنامج النصي SQL أعلاه في MySQL منضدة العمل ضد "myflixdb".
يؤدي تحديث myflixdb إلى إظهار الجدول الذي تم إنشاؤه حديثًا والمسمى member_indexed.
"ملحوظة" يحتوي جدول member_indexed على "أسماء_كاملة" في عقدة الفهارس.
مع توسع قاعدة الأعضاء وزيادة عدد السجلات، ستكون استعلامات البحث في الجدول member_indexed التي تستخدم عبارات WHERE وORDER BY أسرع بكثير مقارنة بتلك التي يتم إجراؤها في جدول الأعضاء دون تحديد الفهرس.
إضافة بناء جملة الفهرس الأساسي
أنشأ المثال أعلاه الفهرس عند تعريف جدول قاعدة البيانات. لنفترض أن لدينا جدولًا محددًا بالفعل وأن استعلامات البحث عليه بطيئة جدًا. يستغرقون وقتًا طويلاً لإرجاع النتائج. بعد التحقيق في المشكلة، اكتشفنا أنه يمكننا تحسين أداء النظام بشكل كبير عن طريق إنشاء INDEX على العمود الأكثر استخدامًا في جملة WHERE.
يمكننا استخدام الاستعلام التالي لإضافة الفهرس
CREATE INDEX id_index ON table_name(column_name);
لنفترض أن استعلامات البحث على جدول الأفلام بطيئة جدًا ونريد استخدام فهرس على "عنوان الفيلم" لتسريع الاستعلامات، يمكننا استخدام البرنامج النصي التالي لتحقيق ذلك.
CREATE INDEX `title_index` ON `movies`(`title`);
يؤدي تنفيذ الاستعلام أعلاه إلى إنشاء فهرس في حقل العنوان في جدول الأفلام.
وهذا يعني أن جميع استعلامات البحث في جدول الأفلام باستخدام "العنوان" ستكون أسرع.
ومع ذلك، ستظل استعلامات البحث في الحقول الأخرى في جدول الأفلام أبطأ مقارنة بتلك المستندة إلى الحقل المفهرس.
ملحوظة: يمكنك إنشاء فهارس على أعمدة متعددة إذا لزم الأمر اعتمادًا على الحقول التي تنوي استخدامها لمحرك البحث في قاعدة البيانات الخاصة بك.
إذا كنت تريد عرض الفهارس المحددة في جدول معين، فيمكنك استخدام البرنامج النصي التالي للقيام بذلك.
SHOW INDEXES FROM table_name;
دعونا الآن نلقي نظرة على جميع الفهارس المحددة في جدول الأفلام في ملف myflixdb.
SHOW INDEXES FROM `movies`;
تنفيذ البرنامج النصي أعلاه في MySQL طاولة العمل مقابل myflixdb يعطينا نتائج على الفهرس الذي تم إنشاؤه.
ملحوظة: لقد تم بالفعل فهرسة المفاتيح الأساسية والأجنبية الموجودة على الطاولة بواسطة MySQL. كل فهرس له اسم فريد خاص به ويظهر العمود الذي تم تعريفه عليه أيضًا.
بناء الجملة: إسقاط الفهرس
يتم استخدام أمر الإفلات لإزالة الفهارس المحددة بالفعل في الجدول.
قد تكون هناك أوقات قمت فيها بالفعل بتحديد فهرس على جدول يتم تحديثه بشكل متكرر. قد ترغب في إزالة الفهارس الموجودة في مثل هذا الجدول لتحسين أداء استعلامات UPDATE وINSERT. بناء الجملة الأساسي المستخدم لإسقاط فهرس على الجدول هو كما يلي.
DROP INDEX `index_id` ON `table_name`;
دعونا الآن نلقي نظرة على مثال عملي.
DROP INDEX ` full_names` ON `members_indexed`;
يؤدي تنفيذ الأمر أعلاه إلى إسقاط الفهرس بالمعرف ` full_names ` من الجدول member_indexed.
الملخص
- تعتبر المؤشرات قوية جدًا عندما يتعلق الأمر بتحسين أداء بشكل كبير MySQL استعلامات البحث.
- يمكن تعريف الفهارس عند إنشاء جدول أو إضافتها لاحقًا بعد إنشاء الجدول بالفعل.
- يمكنك تعريف الفهارس على أكثر من عمود واحد في الجدول.
- يتم استخدام SHOW INDEX FROM table_name لعرض الفهارس المحددة على الجدول.
- يتم استخدام أمر DROP لإزالة فهرس محدد في جدول معين.