Secara default semua indeks di Oracle tidak dikelompokkan. Satu-satunya indeks berkerumun di Oracle adalah indeks kunci primer Index-Organized tables (IOT).
Anda dapat menentukan apakah sebuah tabel adalah IOT dengan melihat IOT_TYPE
kolom di ALL_TABLES
tampilan (kunci utamanya dapat ditentukan dengan menanyakan ALL_CONSTRAINTS
dan ALL_CONS_COLUMNS
dilihat).
Berikut adalah beberapa alasan mengapa kueri Anda dapat mengembalikan baris yang dipesan:
- Tabel Anda disusun berdasarkan indeks dan
FIELD
adalah bagian utama dari kunci utamanya. - Tabel Anda tersusun rapi tetapi baris-barisnya secara kebetulan diurutkan berdasarkan
FIELD
, ini terkadang terjadi pada kolom identitas yang bertambah.
Kasus 2 akan mengembalikan baris yang diurutkan hanya secara kebetulan. Urutan sisipan tidak dijamin, selanjutnya Oracle bebas untuk menggunakan kembali blok lama jika ada yang kebetulan memiliki ruang yang tersedia di masa mendatang, mengganggu pemesanan yang rapuh.
Kasus 1 sebagian besar waktu akan mengembalikan baris yang dipesan, namun Anda tidak boleh mengandalkannya karena urutan baris yang dikembalikan tergantung pada algoritme jalur akses yang dapat berubah di masa mendatang (atau jika Anda mengubah parameter DB, terutama paralelisme ).
Dalam kedua kasus jika Anda ingin memesan baris, Anda harus menyediakan klausa ORDER BY:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;