इस प्रश्न का उत्तर पहले ही दिया जा चुका है, मैं केवल एक स्पष्टीकरण प्रदान करूंगा कि क्यों कभी-कभी फ़िल्टर ROWNUM=1 या ROWNUM <=1 के परिणामस्वरूप एक लंबा प्रतिक्रिया समय हो सकता है।
ROWNUM फ़िल्टर (एक टेबल पर) का सामना करते समय, ऑप्टिमाइज़र COUNT STOPKEY के साथ एक पूर्ण स्कैन का उत्पादन करेगा। इसका मतलब है कि ओरेकल पंक्तियों को पढ़ना शुरू कर देगा जब तक कि वह पहली एन पंक्तियों का सामना न करे (यहां एन =1)। एक पूर्ण स्कैन ब्लॉक को पहली सीमा से उच्च जल चिह्न तक पढ़ता है। Oracle के पास यह निर्धारित करने का कोई तरीका नहीं है कि किन ब्लॉकों में पंक्तियाँ हैं और जो पहले से नहीं हैं, इसलिए सभी ब्लॉक तब तक पढ़े जाएंगे जब तक कि N पंक्तियाँ नहीं मिल जातीं। यदि पहले ब्लॉक खाली हैं, तो इसका परिणाम कई बार पढ़ा जा सकता है।
निम्नलिखित पर विचार करें:
SQL> /* rows will take a lot of space because of the CHAR column */
SQL> create table example (id number, fill char(2000));
Table created
SQL> insert into example
2 select rownum, 'x' from all_objects where rownum <= 100000;
100000 rows inserted
SQL> commit;
Commit complete
SQL> delete from example where id <= 99000;
99000 rows deleted
SQL> set timing on
SQL> set autotrace traceonly
SQL> select * from example where rownum = 1;
Elapsed: 00:00:05.01
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=1 Bytes=2015)
1 0 COUNT (STOPKEY)
2 1 TABLE ACCESS (FULL) OF 'EXAMPLE' (TABLE) (Cost=7 Card=1588 [..])
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
33211 consistent gets
25901 physical reads
0 redo size
2237 bytes sent via SQL*Net to client
278 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
जैसा कि आप देख सकते हैं कि संगत की संख्या बहुत अधिक है (एक पंक्ति के लिए)। यह स्थिति कुछ मामलों में सामने आ सकती है, उदाहरण के लिए, आप /*+APPEND*/
के साथ पंक्तियाँ सम्मिलित करते हैं संकेत (इस प्रकार उच्च पानी के निशान से ऊपर), और आप समय-समय पर सबसे पुरानी पंक्तियों को भी हटा देते हैं, जिसके परिणामस्वरूप खंड की शुरुआत में बहुत सी खाली जगह होती है।