Pertanyaan ini adalah tentang efektivitas teknik pengindeksan SQL Server. Saya pikir ini dikenal sebagai "persimpangan indeks".
Saya sedang bekerja dengan aplikasi SQL Server (2008) yang sudah ada yang memiliki sejumlah masalah kinerja dan stabilitas. Para pengembang melakukan beberapa hal aneh dengan pengindeksan. Saya tidak bisa mendapatkan tolok ukur konklusif tentang masalah ini, saya juga tidak dapat menemukan dokumentasi yang benar-benar bagus di internet.
Ada banyak kolom yang bisa dicari di sebuah tabel. Pengembang membuat indeks kolom tunggal pada SETIAP kolom yang dapat dicari. Teorinya adalah bahwa SQL Server akan dapat menggabungkan (berpotongan) masing-masing indeks ini untuk secara efisien mengakses tabel di sebagian besar keadaan. Ini adalah contoh sederhana (tabel sebenarnya memiliki lebih banyak bidang):
CREATE TABLE [dbo].[FatTable](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[col1] [nchar](12) NOT NULL,
[col2] [int] NOT NULL,
[col3] [varchar](2000) NOT NULL, ...
CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC )
CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC )
select * from fattable where col1 = '2004IN'
select * from fattable where col1 = '2004IN' and col2 = 4
Saya pikir beberapa indeks kolom yang ditargetkan untuk kriteria pencarian jauh lebih baik, tetapi saya mungkin salah. Saya telah melihat rencana permintaan yang menunjukkan SQL Server melakukan pencocokan hash pada dua indeks pencarian. Mungkin ini masuk akal ketika Anda tidak tahu bagaimana tabel dicari? Terima kasih.