Bagaimana cara mengindeks hasil GABUNG dari dua tabel atau lebih untuk meningkatkan kinerja di SQL server?

9

Saya baru dalam pengindeksan dan telah melalui dasar-dasar pengindeksan. Saya dapat menemukan indeks berkerumun standar untuk batasan kunci utama dalam bagian indeks dari tabel yang sesuai, tetapi setelah membuat batasan kunci asing saya tidak dapat menemukannya.

Sekarang saya memiliki persyaratan di mana pengindeksan harus dilaksanakan untuk meningkatkan kinerja. Saya telah membaca tentang pengindeksan kunci asing untuk meningkatkan kinerja hasil BERGABUNG .

Apakah saya perlu menambahkan kolom kunci asing ke indeks non-cluster tambahan atau kunci asing memiliki pengindeksan default?

Bagaimana saya bisa secara efektif menerapkan pengindeksan jika struktur tabel SQL saya adalah sebagai berikut dan saya memiliki permintaan GABUNG dengan klausa WHERE menggunakan t1_col3

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)
Harun
sumber

Jawaban:

13

Kunci asing tidak memiliki indeks secara default. Anda harus membuatnya.

Dalam hal ini, saya akan menyarankan salah satu dari ini. Itu tergantung pada selektivitas relatif dari 2 kolom

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

ATAU

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

INCLUDE akan membuat penutup indeks untuk menghindari pencarian kunci / bookmark

gbn
sumber
1
Sertakan adalah fitur baru di SQL-Server 2005. Untuk berjaga-jaga jika Anda masih menggunakan Sql-server 2000.
bernd_k
@bernd_k: Hanya 6 tahun dan 3 versi yang lalu :-)
gbn