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

tumpukan SQL Server vs. indeks berkerumun

Penyimpanan tumpukan tidak ada hubungannya dengan tumpukan ini .

Heap hanya berarti catatan itu sendiri tidak diurutkan (yaitu tidak ditautkan satu sama lain).

Saat Anda memasukkan catatan, catatan itu akan dimasukkan ke dalam ruang kosong yang ditemukan database.

Memperbarui baris dalam tabel berbasis heap tidak memengaruhi catatan lain (meskipun memengaruhi indeks sekunder)

Jika Anda membuat indeks sekunder pada HEAP tabel, RID (semacam penunjuk fisik ke ruang penyimpanan) digunakan sebagai penunjuk baris.

Indeks berkerumun berarti bahwa catatan adalah bagian dari B-Tree . Saat Anda memasukkan catatan, B-Tree perlu ditautkan ulang.

Memperbarui baris dalam tabel berkerumun menyebabkan relinking dari B-Tree, i. e. memperbarui pointer internal di catatan lain.

Jika Anda membuat indeks sekunder pada tabel berkerumun, nilai kunci indeks berkerumun digunakan sebagai penunjuk baris.

Ini berarti indeks berkerumun harus unik. Jika indeks berkerumun tidak unik, kolom tersembunyi khusus yang disebut uniquifier ditambahkan ke kunci indeks yang membuatnya unik (dan ukurannya lebih besar).

Perlu juga dicatat bahwa membuat indeks sekunder pada kolom membuat nilai atau kunci indeks berkerumun menjadi bagian dari kunci indeks sekunder.

Dengan membuat indeks pada tabel berkerumun, Anda sebenarnya selalu mendapatkan indeks komposit

CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)

CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)

Indeks IX_mytable_5678 sebenarnya adalah indeks pada kolom berikut:

col5
col6
col7
col8
col1
col2
col3
col4

Ini memiliki satu efek samping lagi:

Sebuah DESC kondisi dalam indeks satu kolom pada tabel berkerumun masuk akal di SQL Server

Indeks ini:

CREATE INDEX IX_mytable ON mytable (col1)

dapat digunakan dalam kueri seperti ini:

SELECT  TOP 100 *
FROM    mytable
ORDER BY
       col1, id

, sedangkan yang ini:

CREATE INDEX IX_mytable ON mytable (col1 DESC)

dapat digunakan dalam kueri seperti ini:

SELECT  TOP 100 *
FROM    mytable
ORDER BY
       col1, id DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Enkripsi string koneksi di app.config

  2. Cara Membatasi Baris dalam Kumpulan Hasil SQL Server

  3. Kesalahan nama kolom yang ambigu

  4. Apakah Penyedia Microsoft OLE DB untuk SQL Server mendukung TLS 1.2?

  5. sql menggunakan pernyataan dengan variabel