|
Pernyataan 1: Awalan tanda persen % wildcard akan menyebabkan kueri SQL menghentikan indeks dan sebagai gantinya menggunakan pemindaian tabel penuh. Pernyataan ini populer Kesimpulannya salah Faktanya, pernyataan ini tidak terlalu akurat Awalan wildcard % akan membuat pencarian SQL untuk indeks sangat efisien, tetapi dalam banyak kasus masih akan masuk ke indeks (tidak diperlukan indeks teks lengkap, cukup buat indeks normal) BUAT INDEKS NON-KLUSTER [NAMA Ix_index] PADA [dbo]. [wkf_ Nama Tabel]
( [db_title] ASC
) Eksekusi saat ini PILIH 10 teratas [db_id],[db_Summary],[db_AddDate],[db_title] DARI [nama perpustakaan]. [dbo]. [wkf_database] di mana [db_title]seperti '%dba%' mengurutkan dengan 1 desc
Rencana kueri ditampilkan dengan jelas
Sebelum perbandingan diindeks:
Sebagai pengecualian, kueri kompleks Pengoptimal kueri dapat meninggalkan indeks demi pemindaian tabel penuh. Ini tidak hanya terjadi dengan LIKE '%keyword%', tetapi juga terkait dengan kompleksitas kueri
Pernyataan 2: Persentase % awalan wildcard akan membuat kueri SQL diindeks daripada tidak ada indeks
Pernyataan ini sangat sepihak, dan 99% dari indeks akan mengurangi IO dan meningkatkan efisiensi dibandingkan dengan tidak mengindeks, tetapi tindakan pencocokan kunci setelah indeks ditemukan juga sebagian memakan kinerja. Seperti yang ditunjukkan pada dua gambar di atas, jika kata kunci mudah dicocokkan, pemindaian tabel penuh dengan cepat menemukan data, dan pemindaian indeks tidak menghemat cukup waktu untuk menebus waktu yang dihabiskan oleh tindakan pencocokan kunci (sebagian besar kueri online tidak memiliki masalah ini). Pengobatan: 1. Jika Anda tidak peduli, konsumsi kinerja ekstra tidak terlalu besar. Dan kata kunci yang berbeda memiliki konsumsi yang berbeda, tetapi beberapa kata kunci memiliki masalah ini dan dapat diabaikan 2. Cara yang lebih baik adalah membangun indeks penggantian (juga dikenal sebagai indeks INCLUDE) jika kondisi memungkinkan. Premis: a. Ruang penyimpanan cukup, b tidak secara signifikan memengaruhi operasi DML, dan c tidak memiliki bidang besar dalam indeks yang ditimpa BUAT INDEKS NON-KLUSTER [NAMA Ix_index] PADA [dbo]. [wkf_ Nama Tabel]
( [db_title] ASC
) SERTAKAN ( [db_id],[db_Summary],[db_AddDate]) Saat ini, rencana kueri eksekusi adalah sebagai berikut, yang jauh lebih menyegarkan
Di atas adalah apa yang dapat saya pikirkan sekarang untuk pemrosesan SQLSERVER SELECT * FROM TABLENAME SEPERTI '%Keyword %'
|