Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 12044|Yanıt: 0

[İletişim] SQL Server '%keyword%' gibi işlemleri yaptığında indeks kullanım sorunu

[Bağlantıyı kopyala]
Yayınlandı 26.11.2014 15:52:19 | | | |

İ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ç.






Önceki:SQLserver işlem çoğaltması, yeniden başlatma olmadan yeni tablolar ekler
Önümüzdeki:Pratik SQL ifadesi: tarih tahmini
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com