Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2008:Memesan berdasarkan datetime terlalu lambat

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menjelajahi SQL Server 2016 Query Store GUI

  2. Mengapa tidak ada fungsi berjendela di klausa where?

  3. Kolom Pivot Dinamis di SQL Server

  4. Perbaiki "Kesalahan overflow aritmatika mengonversi int ke tipe data numerik" di SQL Server

  5. Apakah ada SELECT ... INTO OUTFILE yang setara di SQL Server Management Studio?