Yoğun sorgulamalarda indeksler bize performans artışı sağlar. Fakat klasik indeksleri her alan tipi için kullanamayız. Text ağırlıklı alanların indekslenmesi için Sql Server üzerinde Full Text Search isimli ekstra bir servis bulunmakta. CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, ve NTEXT alanları indekslenmesini sağlamakta. Tek şart bu indeksin yapılacağı tabloda bir tane tekil alan bulunması.
Full Text Search servisinin algoritmasına ulaşamadım ama tahminimce bu tekil alanla birlikte varolan text ifadenin kelimeler olarak farklı satırlara bölünmesi şeklinde.
Yani
Yani
1, "bugün hava güzel"
şeklinde bir kayıt varsa bu kayıt
1, "bugün"
1, "hava"
1, "güzel"
şeklinde 3 kayıt olarak eklenir ve diğer satırlarla birlikte text alan üzerinde tekrar bir indeksleme yapılır. Eğer "bugün" kelimesini sorgularsak direk indekslenmiş datadan sonuç gelir ve içinde "bugün" geçen kayıtlar kolayca bulunabilir. Biz de aslında bu mantıkla kendimize özel servisleri yazabiliriz. Bu şekilde algoritma sadece kendi isteğimize cevap vereceği için daha fazla performans yakalayabiliriz. Tabii ki database sistemleri kendi algoritmalarında sistem üzerindeki kendi nimetlerinden faydalanmakta.
Bir Full Text Index tanımlamak için öncelikle Database-Storage altında yeni bir Full Text Catalog oluşturulur.Database özelliklerinden Files sekmesinde "Use full-text indexing" seçeneği aktif hale getirilir.İstediğimiz kolon üzerinde sağ tuş ile FullText Index ekleyebiliriz.
FREETEXT
FREETEXTTABLE
CONTAINS
CONTAINSTABLE
şeklinde 4 kullanımı var.
şeklinde 4 kullanımı var.
SELECT testtable
FROM textcolumn
WHERE FREETEXT (textcolumn, 'bugün' )
textcolumn kolonu üzerinde "bugün" geçen tüm kayıtları listeleyebiliriz. Diğer komutlarla daha farklı seçenekler mevcut.