2010-07-09 20 views
36

tek bir kelime aramak istiyorum nerede bir durum var.Benzerlik '% Query%' gibi performans tam metin arama CONTAINS sorgu

Bu senaryoda, hangi sorgu performans açısından iyi olur?

Select Col1, Col2 from Table Where Col1 Like '%Search%' 

veya

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search') 

?

+0

Ayrıca şunu bilmek isterdim: "REGEXP" kullanarak bir sorgunun göreli performansı nedir? – JYelton

+1

Hangi veritabanı? Farklı veritabanlarında tamamen farklı performans özelliklerine sahip olacaklar. – Oded

+0

@Oded: En çok kullandığım MS-SQL Server ve MySQL. Sorunun amaçları için, SQL Server'ın en çok ilgilendiğini düşünüyorum. – JYelton

cevap

36

Tam Metin Arama (CONTAINS kullanarak), LIKE kullanarak joker karakterlerden daha hızlı/daha verimli olacaktır. Tam Metin Arama (FTS), FTS'nin kullanabileceği Tam Metin İndekslerini tanımlama yeteneğini içerir. Niçin işlevselliği kullanmayı düşünüyorsanız bir FTS endeksi tanımlayamazsınız ...

Sol taraftaki joker karakterlerle (IE: LIKE '%Search') bir indeks kullanamazsınız (sütun için varsayarak), bir masa taraması garanti etmek. &'u test etmedim, ancak regex aynı tuzağa sahip. Açıklığa kavuşturmak için, LIKE '%Search' ve LIKE '%Search%' bir indeks kullanamaz; LIKE 'Search%' bir dizin kullanabilir.

+4

MS SQL Server'da, tam metin dizini için tam bir metin dizini gerekir. CONTAINS kullanmak. –

+1

Tam metin arama motorlarından daha hızlı mı olacak? Lucene/Solr gibi? Özellikle milyonlarca kayıt durumunda. – Krunal

6

Tipik bir veritabanı için, CONTAINS araması, aranan alanda uygun tam metin arama dizini oluşturulduğu varsayımıyla çok daha hızlı olabilir. LIKE operatörünün değerlendirmesi genellikle bir endeks kullanmaz ve dolayısıyla tüm verileri okumalıdır.

-1

Tabloda arama yaptıkları gibi, performansı kendiliğinden öldürür. CTE'de arama yapmak daha iyidir.

+0

URL'yi aşağıdan deneyin http://stackoverflow.com/questions/1569002/how-can-i-optimize-refactor-a-tsql-like-clause/32329298#32329298 – Agrawars