تحسين أداء استعلام T-SQL لتجميع بيانات السجلات بكفاءة
في هذا السياق، يظهر أن استعلامك الحالي يتأثر بتأثير سلبي على الأداء بسبب عدة عمليات فرعية مكررة تقوم بفحص الجدول نفسه عدة مرات، وهذا يؤدي إلى تكرار الجهد الحسابي وبالتالي إلى إبطاء الاستعلام. لتحسين الأداء، يمكن تحسين هذا الاستعلام عن طريق استخدام عمليات الانضمام (JOIN) والتجميع (SUM و COUNT) بشكل أفضل.
إليك استعلام معدل قليلاً يستند إلى عمليات الانضمام والتجميع:
-
تصميم واختبار فئة الموظف في لغة البرمجة C#22/02/2024
-
تحديد العناصر الأولى في CSS19/03/2024
-
تجاوز حدود عدد المواضيع في AWS SNS09/03/2024
sqlSELECT
mvlog.loc,
CONVERT(date, DATEADD(ss, mvlog.entrytime,'19700101')) AS edate,
mvlog.tag,
COUNT(ml.loc) AS visits,
SUM(ml.entrywt - ml.exitwt) AS consumed,
SUM(ml.exittime - ml.entrytime) AS occupancy
FROM
eventlogV AS mvlog
JOIN
mylog AS ml
ON
mvlog.loc = ml.loc
AND mvlog.edate = CONVERT(date, DATEADD(ss, ml.entrytime,'19700101'))
AND mvlog.tag = ml.tag
WHERE
mvlog.tag IS NOT NULL
AND mvlog.loc IS NOT NULL
GROUP BY
mvlog.loc,
CONVERT(date, DATEADD(ss, mvlog.entrytime,'19700101')),
mvlog.tag
تلاحظ أننا استخدمنا عمليات الانضمام لتجنب تكرار الفحص المتكرر للجدول. يتم أيضًا استخدام العبارة الشرطية WHERE لتحسين الأداء بمنع القيم الفارغة (NULL) وضمان توفر الفهرس على الحقول المرتبطة بالانضمام.
المزيد من المعلومات
بالطبع، سأوسع على الاستعلام الذي قدمته وأقدم بعض التوضيحات إضافية حول كيفية تحسين الأداء وتنظيم الاستعلام.
أولاً وقبل كل شيء، لنلقي نظرة على التعديلات التي تم إجراؤها في الاستعلام:
-
استخدام عمليات الانضمام (JOIN): في النسخة المعدلة من الاستعلام، تم استخدام عمليات الانضمام لتجنب تكرار فحص الجدول مرات عديدة، وبدلاً من ذلك، تم دمج الجدولين
eventlogV
وmylog
باستخدام عمليات الانضمام. -
تجنب استخدام الفهرس مباشرة: في الاستعلام المعدل، لاحظت العبارة
WITH (INDEX(pt_index))
، ولكن قد تكون هذه العبارة غير ضرورية، حيث يمكن لمحرك قاعدة البيانات أن يختار الفهرس المناسب بناءً على الخوارزميات الخاصة به. -
استخدام الـ GROUP BY: تم استخدام عبارة
GROUP BY
لتجميع البيانات بناءً على الحقول المحددة. هذا يساعد في تقليل حجم البيانات المعالجة وتحسين أداء الاستعلام. -
تحسين شروط WHERE: تم استخدام الشروط
WHERE
لتحسين أداء الاستعلام عن طريق استبعاد القيم الفارغة (NULL) في حقولtag
وloc
.
تلك التحسينات يمكن أن تؤدي إلى تحسين كبير في أداء الاستعلام، خاصة عند التعامل مع مجموعات بيانات كبيرة. يجب أيضاً مراعاة توفير الفهارس اللازمة على الحقول المستخدمة في عمليات الانضمام والتجميع لتعزيز الأداء.