oracle - تحميل - تعذر استرداد النتائج من جدول كبير




oracle program (2)

جرب هذا:

SELECT * FROM (
    SELECT /*+ FIRST_ROWS */ myquery.*, ROWNUM rnum
    FROM (
        SELECT * FROM mytable ORDER BY id
    ) myquery
    WHERE ROWNUM <= 15
) WHERE rnum >= 2;

أنا إصدار استعلام بسيط جدا ضد جدول مع 15،000،000 الصفوف. أنا أتعرض لسلوك غير منتظم فيما يتعلق بحدود rownum .

على سبيل المثال، و الاستعلام التالي

select * from (select * from my_table order by id) where rownum < 2000000

يعمل دون عناء، فضلا عن هذا واحد

select * from (select * from my_table order by id) where rownum between 1 and 15

ولكن هذا واحد لا يكمل أبدا

select * from (select * from my_table order by id) where rownum between 2 and 15

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

يتم فهرسة الجدول على عمود id وهو مؤشر أسك -sorted؛ وإلا أفترض أن العثور حتى مجرد السجل الأول يتطلب نوع الجدول الكامل.

أين يجب أن أقوم بالتحقيق للحصول على هذه المشكلة؟

بلدي Oracle Database 11g Release 11.2.0.3.0 - 64bit Production هو Oracle Database 11g Release 11.2.0.3.0 - 64bit Production


كما بدأتprezmyslawKruglej لشرح، شرط where rownum > 1 لن يعود أي سجلات. وصفها بالتفصيل من قبل توم كايت .

أقترح عليك استخدام الدالة row_number() بدلا من ذلك، شيء من هذا القبيل

select ... from (
  select ..., row_number() over (order by whatever) as rn from ...
) where rn between 10 and 20






oracle11g