الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ما الفارق بين أنواع الفهارس

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته
أرجو من أخوانى فى المنتدى لمن يعلم الفارق بالتفصيل بين أنواع الفهارس الآتية أن يتفضل بشرحها :
Bitmap
Reverse key
B-tree
Unique B-tree
Function based
Non_unique concatenated
partitioned
حبث أنى تعرضت لهم فى أسئلة عديدة وشروح مختلفة لكن الفارق بين بعضهم والآخر غير واضح حتى فى شرح ريجى ميللر والتست كنج كلها ... أرجو أن يكون الشرح مفسر ولا يقتصر الأمر على إعطائى reference

تم تعديل بواسطة Walid Azmy

بتاريخ:
  • كاتب الموضوع

ياااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااه ه ه ه

كل دى فروق

:angry: :angry: :D

بتاريخ:

السلام عليكم يااخ وليد
في البدايه عايز اشكرك على المجهود الكبير اللي بتقوم بيه في الموقع وافاده المبتدئين مثلي

على فكره محدش رد عليك اصل محدش عارف الحل :angry: :angry: :D

  • بعد 3 أسابيع...
بتاريخ:

السلام عليكم ورحمة الله وبركاته،،
أخواني مازال هذا الموضوع من دون إجابة ، هل هناك من يستطيع إعداد شرح مفصل ووافي عن هذا الموضوع وجزاكم الله خيرا :D

بتاريخ:
  • كاتب الموضوع

تعليقا على كلام أخى msh من السهل أن أقوم بمراجعة chapter 12 من كتاب fundamentals I وأعمل له ملخص فى هذه المشاركة وخلاص .. فالناحية النظرية ليست المشكلة
لكن ليس هذا ما أريده وإنما أرغب من احد أخواننا الDBA فى المنتدى فى وضع سيناريوهات عملية لإستخدام كل فهرس أى وضع أمثلة واضحة من واقع عمله لأن مدير قاعدة البيانات يجب وأن يكون لديه مهارة تحديد أفضل الطرق لإستعادة البيانات من جدول معين حسب حجمه وظروفه ونسبة تكرار بيانات معينة فيه والفهارس أداة قوية لذلك
أرجو الرد على الأقل لتقريب شرح Chapter 12 ..

تم تعديل بواسطة Walid Azmy

بتاريخ:

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

indexes.zip

بتاريخ:
  • كاتب الموضوع

مشكور أخى msh على إهتمامك والملف المرفق
لكن وبما أننى أتكلم مع نفسى من البداية فى الموضوع فمضطر أرد على نفسى أيضا .... وهذا الشرح نتيجة نقاشات طويلة بينى وبين أخى عبد الله أسعد (bedooracle) أرجو الدعاء له بالخير والتوفيق فهو الوحيد الذى تفاعل معى وكانت لديه الحماسة لتغطية الموضوع معا بالشكل الوافى .. وسوف أهتم بالشرح هنا على انواع الفهارس من الناحية المادية لأنها هى التى يتعامل معها ال DBA بشكل فعلى وتؤثر فى أداء قاعدة البيانات وكثيرا ما تكون موضوع أسئلة امتحان fund 1 .. تاركا الأنواع المنطقيةlogical للكتاب حيث يمكن الرجوع اليه بشأن تعريفها.... ولنبدأ خطوة خطوة ...

الفهارس (indexes) كما قلت يمكن تقسيمها بمنظور منطقى logical فتكون أنواعها كالتالى
– Single column or concatenated
– Unique or nonunique
– Function-based
– Domain
ويمكن تقسيمها بمنظور مادى من حيث الطريقة الفعلية التى تخزن فيها البيانات داخل الجداول فى الصفوف وكيفية البحث فيها عن الصفوف المطلوبة تبعا لجملة sql التى يتم إصدارها وتقسم هنا إلى
– Partitioned or nonpartitioned
– B-tree
Normal or reverse key
– Bitmap
الفهارس partitioned يتم عملها على ال partitioned tables الجداول التى يتم توزيعها على أكتر من tablespace لتسهيل الإدارة ...... لكنى سأركز هنا على المشكلة التى تواجه الDBA فعليا وهى أيهما يختار عندما يتعامل مع قاعدة بيانات بشكل عملى Bitmap index أم B*tree ............؟
الفارق الأساسى بين النوعين أن الbitmap يتعامل بشكل جيد مع الجداول التى تحوى قيم مميزة distinct values قليلة فى العمود الذى تم عمل الفهرس عليه ومثال على ذلك حقل جنس المواطن فهو ذكر أو أنثى أما الB*tree فيتعامل بكفاءة أكبر مع الحقول التى تحتوى على قيم مميزة كثيرة مثل حقل رقم الهاتف أو العنوان فقلما يتكرر القيمة فيه ..........
وكلا النوعين يتعامل مع القيمة المميزة بحيث يعطيها ما يعرف بالkey value لكن يختلفا فى طريقة العثور على الkey value تلك حيث يستخدم الB*tree طريقة إسمها list of row IDs بحيث يعطى كل key value فى الفهرس rowid مقابل لها يقوم بالبحث فى قائمته عندما نصدر عبارة select إعتمادا على where إن وجدت ........ لكن لا زال السؤال هو كيف يسهم الB-tree فى البحث السريع عن البيانات وإستعادتها ؟
لنفرض أن لدينا فى حقل مرتب الموظفين القيم الآتية :
300 – 150 – 170 – 550 – 520 – 600 – 130 فيقوم مدير قاعدة البيانات بعمل فهرس B-tree على هذا العمود بحيث يقوم هذا الفهرس بالوقوف عند أول قيمة ووضع القيمة الأكبر على اليمين والأصغر على اليسار فتكون شكل الشجرة كالتالى :

300


550 150
600 520 170 130

هل رأينا شكل الشجرة فبدلا من أن نمشى سبع صفوف لنجد الموظف الذى يتقاضى 170 جنيه مشينا 3 صفوف أو درجات فقط ......... ستأخذ المرتبات 600 و 520 و170 و130 RowID واحد وليكن 3 من ضمن الlist الخاصة بال RowIDs ...... لكن ماذا لو لاحظ مدير قاعدة البيانات أن حقل راتب الموظفين فى تصاعد مستمر مثلا على الترتيب التالى : 122- 155- 174 – 206- 351 هذا سيعنى ان استخدام الB-tree العادى سيكون على الشكل التالى بوضع القيم على اليمين بإستمرار
122
155
174
206
351
إذن الأمر غير مجدى فلقد مر الفهرس على خمسة درجات عندما بحث فى خمسة صفوف لكى يعيد قيمو الموظف الذى يتقاضى راتبا قدره 351 جنيه .. هنا يتخذ قراره السريع بلإستخدام الفهرس من النوع reverse key B-tree الذى يقوم بعكس قيم الحقل فى كل صف أى تصبح 122 (221) و155(551) وهكذا فنعود ونحصل على الشجرة الظريفة التى تختصر الطريق مرة أخرى ........ هذه هى المشاكل العملية التى نتكلم عنها والتى تصادف مدير قاعدة البيانات ..................
لذلك تنصحة أوراكل بأن يستخدم هذا النوع من الفهارس فى حالة الحقول ذات القيم المميزة distict values الكبيرة لأنه سيختصر الوقت ....
أما أخونا الbitmap فيستخدم فى العثور على الkey value وسيلة أخرى هى الmapping function
يعنى إيه ..؟
يقوم الBitmap Index بإعطاء كل key value أى قيمة مميزة RowID كما قلنا ويسمى كل سجل فى الجدول Bit فإذا طابق الحقل الRowId أعطاه القيمة 1ويقال هنا أنه تم ضبطه أى SET وإذا لم يطابقه أعطاه القيمة صفر فالجدول لكل Rowid هو عبارة عن أصفار ووحايد فلو كان الrowid يطابق كلمة محامى على أنها إحدى الkey values مثلا فى حقل الوظيفة وكان الحقل على الشكل التالى :
محامى
مهندس
محاسب
مهندس
طبيب
محامى
محامى
طبيب
طبيب
محامى
كان الجدول بالنسبة للRowID (1000011001 ) وبعد ذلك يستخدم MAPPING FUNCTION بدلا من ال list of rowids التى كنا نستخدمها فى الB-tree وذلك لترجمة ( الواحد ) بالمكان الفعلى للصف كما يستخدم طريقة ضغط compression لضغط (الأصفار البينية) ......
لذلك تنصح أوراكل بإستخدام هذا النوع من الفهارس عندما تكون عدد القيم المميزة فى الحقل قليلة (few distict values) ويعرف هذا بال low cardinality إذا ما نظرنا للجدول على أن به مليونا صف مثلا والقيم المميزة ثلاثة أى أن البحث سيكون فى ثلاثةRowID فقط وتظهر هنا كفاءة الMAPPING FUNCTION والCOMPRESSION FUNCTIO .....
وهناك فروق أخرى بينهما فى الجدول الموجود بالفصل رقم 12 من الكتاب مبنية على ما تم شرحه

أرجو أن أكون قد وفقت فى الشرح
تحياتى ..

تم تعديل بواسطة Walid Azmy

بتاريخ:

السلام عليكم ورحمة الله وبركاته،،
مشكور أخي على هذا الشرح الرائع وجزاك الله خيرا ، وأنتظر التعليقات وإن شاء الله يكون هذا الموضوع مفتاح لنقاش حول الفهارس أتمنى من الجميع المشاركة والتعليق وطرح أسئلة تتعلق بهذا الموضوع لكي يتم تغطيته تماما وشكرا لك أخي وليد مره أخرى :D

بتاريخ:
  • كاتب الموضوع

وهذه Slides رائعة تشرح ال bitmaps وال b-tree من حيث كيف يتم حساب حجم
الفهارس فى سيناريوهات واحدة فى حالة إستخدام كلا منهما

BitMap_Indexex.ace

بتاريخ:

جزاك الله كل خير استاذى وليد فعلا ما قصرت

بتاريخ:
  • كاتب الموضوع

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

  • بعد 4 شهور...
بتاريخ:

. . . Activate

وشكراً أخي وليد (السائل والمجيب :wub: )

  • بعد 3 أسابيع...
بتاريخ:

يعطيكو العافية ربي

  • بعد 6 شهور...
بتاريخ:

جزالك اللة خير ياريت تضع الملف تانى عشان انا محتاجة ومش عارف انزلة

بتاريخ:

اخي عزمي ،،

ممكن ترسل الملف
BitMap_Indexex.ace ( 92.72k ) عدد مرات التحميل: 171
على ايميل [email protected]

  • بعد 1 سنة...
بتاريخ:

الأخ وليد عزمي
أشكرك جزيل الشكر على ماتفضلت به من معلومات قيمه وشرح واضح ومفيد جداً

لي طلب أخي العزيز ممكن ترسل لي الملف المرفق هذا BitMap_Indexex.ace ( 92.72k)OK حيث أنني لم استطع تحميله ارجو الرد بأسرع وقت ممكن حيث أنني بأمس الحاجه لهذا الملف

[email protected]
تقبل أطيب تحيه أخوك الفريدي1

بتاريخ:

الأخ وليد عزمي

أشكرك جزيل الشكر على ماتفضلت به من معلومات قيمه ومفيده وشرح واضح جداً

أخي العزيز لي طلب إذا تكرمت بإرسال الملف المرفق BitMap_Indexex.ace ( 92.72k )okعلى إيميلي ارجو الرد بأسرع وقت

[email protected]

أخوك الفريدي

  • بعد 8 شهور...
بتاريخ:

يا ريت بالله ترسله هوا انا كمان اكون شاكر لك

[email protected]


ويعطيكم الله العافيه على هذا الطرح الناجح والى الامام

  • بعد 5 سنة...
بتاريخ:

thank you so much

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.