استخدم الفهرس يا لوقا! › Oracle سكربتات المثال لـ «الترتيب والتجميع» 97 / 139 السابق التالي

سكربتات أمثلة Oracle لـ«الترتيب والتجميع»

يحتوي هذا القسم على شيفرة create وinsert وPL/SQL لتشغيل أمثلة الفصل 6الترتيب والتجميع في قاعدة بيانات Oracle 11gR2.

order by المفهرس

SELECT sale_date, product_id, quantity
  FROM sales
 WHERE sale_date >= TRUNC(sysdate) - INTERVAL '1' DAY
 ORDER BY product_id

وجمع إحصاءات جديدة ممارسة جيدة بعد تغيير الفهارس:

BEGIN
     DBMS_STATS.GATHER_TABLE_STATS(null, 'SALES', 
     METHOD_OPT=>'for all indexed columns', CASCADE => true);
END;
/

group by المفهرس

توجد مشكلة خاصة في قاعدة بيانات Oracle (من 11g إلى 19c على الأقل) تظهر عند ترتيب النتيجة المجمَّعة بترتيب الفهرس المعاكس:

SELECT product_id, sum(eur_value)
  FROM sales
 WHERE sale_date = TRUNC(sysdate) - INTERVAL '1' DAY
 GROUP BY product_id
 ORDER BY product_id DESC;

مع أنها تستطيع استخدام الفهرس عند الترتيب بترتيب الفهرس:

SELECT product_id, sum(eur_value)
  FROM sales
 WHERE sale_date = TRUNC(sysdate) - INTERVAL '1' DAY
 GROUP BY product_id
 ORDER BY product_id ASC;

ولا يوجد حل معروف لهذه المشكلة.