"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ما هو الفهرس المركب الأمثل لاستعلامات النطاق: الأعمدة ذات العلاقة الأساسية العالية مقابل الأعمدة ذات العلاقة الأساسية المنخفضة؟

ما هو الفهرس المركب الأمثل لاستعلامات النطاق: الأعمدة ذات العلاقة الأساسية العالية مقابل الأعمدة ذات العلاقة الأساسية المنخفضة؟

تم النشر بتاريخ 2024-12-21
تصفح:256

Which Composite Index is Optimal for Range Queries: High vs. Low Cardinality Columns?

موضع عمود ذو قيمة أساسية عالية في الفهارس المركبة مع استعلامات النطاق

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

ضع في اعتبارك ملفات الجدول التي تحتوي على مفتاح أساسي (فعل، اسم الملف) وفهرسين مركبين: INDEX (وقت الملف، تحويلة) و INDEX (تحويلة، وقت الملف). يحتوي كلا الفهرسين على عمود وقت الملف، الذي يحتوي على أصل أعلى من ext.

الاستعلام:

WHERE ext = '...'
  AND filetime BETWEEN ... AND ...
يتطلب الوصول إلى البيانات بناءً على كل من التحويلة ووقت الملف. السؤال الذي يطرح نفسه: ما هو الفهرس الأمثل لمثل هذا الاستعلام؟

تحليللتحديد الفهرس الأمثل، يمكننا استخدام FORCE INDEX وفحص خطط التنفيذ:

-- فرض النطاق على وقت الملف أولاً مؤشر القوة (fe) حدد العد (*)، AVG (fsize) من الملفات حيث تحويلة = 'gif' ووقت الملف >= '01-01-2015' ووقت الملف = '01-01-2015' AND filetime

-- Force range on filetime first
FORCE INDEX(fe) SELECT COUNT(*), AVG(fsize)
FROM files
WHERE ext = 'gif'
  AND filetime >= '2015-01-01'
  AND filetime = '2015-01-01'
  AND filetime [] &&&]

تتبع المحسن

لمزيد من تحليل سلوك المحسن، يمكننا استخدام المحسن تتبع:SELECTexplain_format = 'JSON'; حدد COUNT(*)، AVG(fsize) من الملفات حيث تحويلة = 'gif' ووقت الملف >= '01-01-2015' AND filetime

يكشف التتبع أن المحسن يختار INDEX(ext, filetime) لأنه يمكنه استخدام كلا عمودين الفهرس لتصفية البيانات وجلبها. في المقابل، يمكن لـ INDEX(filetime, ext) استخدام العمود الأول فقط (filetime) للتصفية.

SELECT explain_format = 'JSON';

SELECT COUNT(*), AVG(fsize)
FROM files
WHERE ext = 'gif'
  AND filetime >= '2015-01-01'
  AND filetime الاستنتاجات

استنادًا إلى التحليل، يمكن الاستنتاجات التالية: مرسومة:

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

يتم تحسين أداء الاستعلام عندما يتم ترتيب الأعمدة في الفهرس وفقًا للترتيب الذي يتم استخدامها به في جملة WHERE.
  • لا تعد العلاقة الأساسية وحدها عاملاً حاسماً في التحديد المؤشر الأمثل. في السيناريوهات التي يكون فيها عمود النطاق ذو قيمة أساسية أعلى ولكن عمود المساواة متضمن في مسند المساواة، فإن وضع عمود المساواة أولاً يؤدي إلى أداء أفضل.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3