SELECT COUNT(*) FROM tableA WHERE rownum <= 1001
1000件より多いかどうか判定するには、1200万件の実データを使って実測した結果、単純にCOUNT(*)した結果で判断するのではなく、1001件で足切りしたレコードの件数が1001かどうかで判定するのが良い事が分かりました。
SQL> SELECT COUNT(*) FROM tableA WHERE rownum <= 1001
1001
COST=12215
SELECT STATEMENT
SORT AGGREGATE
COUNT STOPKEY
INDEX FAST FULL SCAN
PHYSICAL READS 17
キャッシュされていないときは1秒未満。2回目以降はすべてキャッシュに入っているのでPHYSICAL READSは0、実行時間はほぼ瞬時。
SQL> SELECT COUNT(*) FROM tableA
12,000,000
COST=12215
SELECT STATEMENT
SORT AGGREGATE
INDEX FAST FULL SCAN
PHYSICAL READS 54089
実行時間は30~35秒。何度やってもその範囲。
[追記]
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0