Memesan dengan id
mungkin menggunakan pemindaian indeks berkerumun saat memesan berdasarkan datetime
menggunakan pengurutan atau pencarian indeks.
Kedua metode ini lebih lambat daripada pemindaian indeks berkerumun.
Jika tabel Anda dikelompokkan berdasarkan id
, pada dasarnya itu berarti sudah diurutkan. Catatan terkandung dalam B+Tree
yang memiliki daftar tertaut yang menghubungkan halaman di id
memesan. Mesin harus melintasi daftar tertaut untuk mendapatkan catatan yang diurutkan berdasarkan id
.
Jika id
s dimasukkan secara berurutan, ini berarti bahwa urutan fisik baris akan sesuai dengan urutan logis dan pemindaian indeks berkerumun akan lebih cepat.
Jika Anda ingin catatan Anda diurutkan berdasarkan datetime
, ada dua opsi:
- Ambil semua catatan dari tabel dan urutkan. Kelambatannya jelas.
- Gunakan indeks pada
datetime
. Indeks disimpan di ruang disk yang terpisah, ini berarti mesin perlu berpindah-pindah antara halaman indeks dan halaman tabel dalam loop bersarang. Ini juga lebih lambat.
Untuk meningkatkan pemesanan, Anda dapat membuat indeks penutup terpisah pada datetime
:
CREATE INDEX ix_mytable_datetime ON mytable (datetime) INCLUDE (field1, field2, …)
, dan sertakan semua kolom yang Anda gunakan dalam kueri ke dalam indeks tersebut.
Indeks ini seperti salinan bayangan dari tabel Anda tetapi dengan data yang diurutkan dalam urutan yang berbeda.
Ini akan memungkinkan untuk menyingkirkan pencarian kunci (karena indeks berisi semua data) yang akan membuat pemesanan dengan datetime
secepat itu di id
.
Pembaruan:
Posting blog baru tentang masalah ini: