إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    SQL الفهارس و أنواعها

    مفهوم الفهارس و أنواعها

    أي كتاب ورقي تقرؤه تجد في بدايته أو في نهايته فهرس يساعدك على البحث فيه بشكل سريع. فمثلاً في أغلب كتب العلوم تجد في أول الكتاب فهرس يخبرك في أي صفحة يبدأ كل درس, و في القرآن الكريم أيضاً تجد في نهايته فهرس يمكنك من خلاله معرفة في أي صفحة تبدأ كل سورة بسهولة.

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

    لتسريع عملية البحث عن المعلومات عليك أولاً تحديد الأعمدة التي تنوي البحث من خلالها, فمثلاً إذا كنت تتعامل مع جدول يحفظ معلومات المستخدمين, و تريد إتاحة إمكانية البحث عن المستخدمين من خلال أسماء المستخدمين, فهنا سيكون عليك إضافة فهرس خاص لأسماء المستخدمين.

    في قواعد البيانات يوجد نوعين أساسيين من الفهارس هما Clustered Indexes و Non Clustered Indexes و الإثنين فكرتهما تسهيل إيجاد المعلومات.


    مفهوم الـ Clustered Indexes

    الفهرس الذي من النوع Clustered يقوم بحفظ المعلومات من الأساس بشكل مرتب, فمثلاً عندما تقوم بتعيين أي عمود كمفتاح رئيسي ( Primary Key ) في الجدول, تقوم قاعدة البيانات بشكل تلقائي بإضافة فهرس له نوعه Clustered لهذا السبب كنا نجد id المستخدمين يتم إرجاعها بنفس الترتيب الذي تم فيه إضافتهم كالتالي.

    id username first_name last_name
    1 ahmad Ahmad Eid
    2 ramez Ramez Morad
    3 hassan Hassan Mortada
    4 saad Saad Alkassem
    5 zaher Zaher Fahmi


    مفهوم الـ Non Clustered Indexes

    الفهرس الذي من النوع Non Clustered فكرته وضع فهرس خارجي لأي عمود في الجدول يتم فيه الإشارة إلى بيانات الجدول الأساسي بشكل مرتب.
    للدقة أكثر, الفهرس الخارجي يقوم بالإشارة إلى عنوان السطر في القرص الصلب ( Physical Address in Hard Drive ) الذي يحتوي على البيانات في الجدول.

    كمثال بسيط, إذا أردنا وضع فهرس Non Clustered خاص للعمود username فهذا الفهرس سيحفظ قيم هذا العمود بشكل أبجدي مرتب و سيضع عنوان كل سطر في القرص الصلب تم منه إحضار القيم.
    الطريقة التي يتم ترتيب القيم فيها لا يمكنك رؤيتها بعينك في قواعد البيانات و لكن يمكنك تخيلها كالتالي.

    username address
    ahmad AB123FD123142
    hassan AB87393F83AD4
    ramez F83AB8D47393A
    saad 80DDC62384AFB
    zaher BC01234ABDFE7

    الآن في حال أردت البحث عن المستخدم من خلال الـ username الخاص به فإن هذه العملية ستكون سريعة جداً حتى لو كانت قاعدة البيانات تضم مليون مستخدم, لأن قاعدة البيانات ستتمكن من إيجاد إسم المستخدم بكل سهولة في الفهرس و من بعدها ستوجهك للسطر أو الأسطر التي تملك القيمة التي بحثت عنها في الجدول الحقيقي.


    متى يجب إضافة فهرس؟

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

    فائدة الفهارس لن تظهر لك إن كنت تتعامل مع قاعدة بيانات صغيرة لأنك لن تشعر بفرق السرعة, و لكنها ستظهر لك حين تتعامل مع قاعدة بيانات فيها آلاف و ملايين الأسطر عندها ستلاحظ فرق كبير في الأداء و سرعة ممتازة في جلب البيانات.


    هل إضافة فهرس لها تأثير سلبي على الأداء؟

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

    طريقة إضافة فهرس

    لإضافة فهرس جديد سواء لعمود واحد أو لأكثر من عمود في ذات الوقت, نستخدم الأمر CREATE INDEX لفعل ذلك.


    الشكل العام لإضافة فهرس

    CREATE INDEX index_name
    ON table_name (colums); 
    	

    • مكان الكلمة index_name نضع الإسم الذي نريد وضعه للفهرس.
    • مكان الكلمة table_name نضع إسم الجدول الذي سنضع الفهرس لأعمدته.
    • مكان الكلمة columns نضع إسم العمود الذي سيتم إنشاء الفهرس من أجله, و في حال أردت وضع أكثر من عمود يجب أن تضع فاصلة بين كل عامودين.

    المثال الأول

    الإستعلام التالي ينشئ فهرس إسمه idx_username خاص للعمود username الموجود في الجدول users.

    الإستعلام

    CREATE INDEX idx_username
    ON users (username); 
    		

    المثال الثاني

    الإستعلام التالي ينشئ فهرس إسمه idx_full_name خاص للعامودين first_name و last_name الموجودين في الجدول users.

    الإستعلام

    CREATE INDEX idx_full_name
    ON users (first_name, last_name); 
    		

    طريقة إضافة فهرس يحتوي على قيم موحدة

    لجعل العمود يقبل قيم موحدة يوجد ثلاث طرق يمكنك إتباع أحدها:

    • جعل نوع العمود من الأساس UNIQUE.
    • إضافة CONSTRAINT للعمود نوعه UNIQUE.
    • إضافة INDEX للعمود نوعه UNIQUE و هذا ما سنتعلمه الآن.

    لإضافة فهرس جديد سواء لعمود واحد أو لأكثر من عمود في ذات الوقت و جعلهم يقبلوا قيم موحدة فقط, نستخدم الأمر CREATE UNIQUE INDEX لفعل ذلك.


    الشكل العام لإضافة فهرس يحتوي على قيم موحدة فقط

    CREATE UNIQUE INDEX index_name
    ON table_name (colums); 
    	

    • مكان الكلمة index_name نضع الإسم الذي نريد وضعه للفهرس.
    • مكان الكلمة table_name نضع إسم الجدول الذي سنضع الفهرس لأعمدته.
    • مكان الكلمة columns نضع إسم العمود الذي سيتم إنشاء الفهرس من أجله, و في حال أردت وضع أكثر من عمود يجب أن تضع فاصلة بين كل عامودين.

    المثال الأول

    الإستعلام التالي ينشئ فهرس قيمه موحدة, إسمه idx_username و هو خاص للعمود username الموجود في الجدول users.

    الإستعلام

    CREATE UNIQUE INDEX idx_username
    ON users (username); 
    		

    المثال الثاني

    الإستعلام التالي ينشئ فهرس قيمه موحدة, إسمه idx_full_name و هو خاص للعامودين first_name و last_name الموجودين في الجدول users.

    الإستعلام

    CREATE UNIQUE INDEX idx_full_name
    ON users (first_name, last_name); 
    		

    طريقة حذف الفهرس

    طريقة حذف الفهرس تختلف من قاعدة بيانات لأخرى و لكن الفكرة هي نفسها تماماً.


    في قواعد بيانات MySQL

    ALTER TABLE table_name
    DROP INDEX index_name;
    	

    الإستعلام التالي يقوم بإلغاء قيد إسمه idx_username.

    مثال

    ALTER TABLE users
    DROP INDEX idx_username; 
    		

    في قواعد بيانات SQL Server

    DROP INDEX table_name.index_name; 
    	

    الإستعلام التالي يقوم بإلغاء قيد إسمه idx_username.

    مثال

    DROP INDEX users.idx_username; 
    		

    في قواعد بيانات Oracle / SQLite

    DROP INDEX index_name;
    	

    الإستعلام التالي يقوم بإلغاء قيد إسمه idx_username.

    مثال

    DROP INDEX idx_username;
    		

    في قواعد بيانات Access

    DROP INDEX index_name ON table_name;
    	

    الإستعلام التالي يقوم بإلغاء قيد إسمه idx_username.

    مثال

    DROP INDEX idx_username ON users;
    		
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب