Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 12044|Jawab: 0

[Komunikasi] Masalah pemanfaatan indeks saat sqlserver menangani seperti '%keyword%'

[Salin tautan]
Diposting pada 26/11/2014 15.52.19 | | | |

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 %'






Mantan:Replikasi transaksi SQL Server menambahkan tabel baru tanpa inisialisasi ulang
Depan:Pernyataan SQL praktis: estimasi tanggal
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com