|
İfade 1: Yüzde işareti %'si joker ön eki SQL sorgularının indeksi durdurmasına ve bunun yerine tam tablo taraması kullanmasına neden olur. Bu ifade oldukça popülerdir Sonuç yanlış Aslında, bu ifade çok doğru değildir. Joker kart %-preeki SQL aramasını son derece verimli yapar, ancak çoğu durumda yine de indekse gider (tam metin indeks gerekmez, sadece normal bir indeks oluşturun) [dbo]'da kümelenmiş olmayan indeks [Ix_index NAME] OLUŞTURUN. [wkf_ Masa Adı]
( [db_title] ASC
) Şu anda infaz edin [kütüphane adı]'ndan ilk 10'u SEÇİN. [db_id],[db_Summary],[db_AddDate],[db_title] FROM [dbo]. [wkf_database] burada [db_title]örneğin '%dba%' sırası 1 desc ile
Sorgulama planı açıkça gösteriliyor
Karşılaştırma indekslenmeden önce:
İstisna olarak, karmaşık sorgular Sorgu optimizatoru indeksten vazgeçip tam tablo taramasına geçebilir. Bu sadece '%keyword%' gibi bir şey için değil, aynı zamanda sorgu karmaşıklığıyla da ilgili
İfade 2: Yüzde %, joker kart önekleri SQL sorgularını indeks yapar, indeks yok
Bu ifade çok tek taraflıdır ve endeksin %99'u SİS'i azaltacak ve endekslememeye kıyasla verimliliği artıracak, ancak endeks bulunduktan sonra temel eşleştirme eylemi de kısmen performans tüketicidir. Yukarıdaki iki şekilde gösterildiği gibi, anahtar kelimeler kolayca eşleştirilirse, tam tablo taraması veriyi hızla bulur ve indeks taraması, anahtar eşleştirme eyleminin harcadığı zamanı telafi etmek için yeterli zaman kazandırmaz (çoğu çevrimiçi sorguda bu sorun yoktur). Tedavi: 1. Eğer umursamıyorsan, ekstra performans tüketimi çok büyük değildir. Farklı anahtar kelimelerin tüketimi farklıdır, ancak bazı anahtar kelimeler bu sorunu yaşıyor ve göz ardı edilebilir 2. Daha iyi bir yol, koşullar izin verirse bir geçersiz bir endeks (INCLUDE indeksi olarak da bilinir) oluşturmaktır. Varsayım: a. Depolama alanı yeterli, b DML işlemlerini anlamlı şekilde etkilemez ve c'nin üzerine yazılmış indekste büyük alanlar yoktur [dbo]'da kümelenmiş olmayan indeks [Ix_index NAME] OLUŞTURUN. [wkf_ Masa Adı]
( [db_title] ASC
) DAHIL ETMEK ( [db_id],[db_Summary],[db_AddDate]) Şu anda, uygulama sorgulama planı şu şekildedir ve bu çok daha ferahlatıcı
Yukarıdakiler, şu anda SQLSERVER işleme için aklıma gelenler: '%Anahtar Kelime %' gibi tablo adından * seç.
|