بكفاءة في العثور على أقصى قدر من القيم والبيانات المرتبطة بها في جداول SQL الكبيرة
في كثير من الأحيان ، تتطلب استعلامات قاعدة البيانات إيجاد القيمة القصوى في عمود واسترداد البيانات المقابلة من أعمدة أخرى داخل نفس الصف. هذا يمثل تحديًا بشكل خاص مع مجموعات البيانات الكبيرة جدًا. فكر في جدول يحتاج إلى العثور على أعلى رقم إصدار لكل معرف فريد ، إلى جانب العلامة المرتبطة به:
عينة الجدول:
ID | tag | version
----- ----- -----
1 | A | 10
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
النتيجة المطلوبة:
ID | tag | version
----- ----- -----
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
بالنسبة للجداول التي تحتوي على حوالي 28 مليون صف ، يمكن أن تكون هناك طرق قياسية مثل Nested SELECT
أو مجموعة بسيطة بواسطة
مع max
بطيئة بشكل لا يصدق. يستخدم حل أكثر كفاءة بكثير وظيفة النافذة
SELECT s.id, s.tag, s.version
FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
FROM YourTable t
) s
WHERE s.rnk = 1;
يعين رتبة فريدة ( rnk ) لكل صف داخل كل معرف يعتمد التصنيف على الإصدار
بترتيب تنازلي ، مما يعني أن أعلى إصدار يحصل على المرتبة 1.
. هذا يعطينا بفعالية الصف مع الإصدار الأقصى لكل معرف
.
يتجنب هذا النهج الاستفسارات المتداخلة ومجموعة
طريقة نظيفة وفعالة لتحقيق النتيجة المطلوبة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3