2011-09-01 184 views
4

我有2個查詢(我相信的,他們必須返回的行相同數量的:)):查詢返回不同的結果

1.

SELECT NAME 
FROM myDataBase.myTable 
WHERE CONTAINS(NAME, 'ABC') 

2.

SELECT NAME 
FROM myDataBase.myTable 
WHERE NAME LIKE '%ABC%' 

但在實踐中我有(例如)以下結果:

對於(1)的查詢

  • (1)的查詢的第一執行:980行受到影響
  • (1)的查詢的第二執行:996行受到影響
  • ...
  • Ñ執行的(1)的查詢:1000行影響

和對於(2)QUER Ÿ

  • (2)查詢的第一次執行:1000行的影響

所以我的問題是:爲什麼會發生?我做錯了什麼? :)

P.S.我是Sql Server的新手和功能,所以我明白這是我所缺乏的理論,還沒有找到任何有關此問題的信息,因此決定詢問

+0

當您測試這些查詢時,數據庫當前是否正在使用? –

+0

嗯,我猜這不是,因爲這裏唯一的用戶是我,我不會運行任何查詢。 – SergeyT

回答

1

CONTAINS可以在全文搜索引擎中運行。

這是完全有可能的是,FTS索引正在重建在該查詢的運行之間。如果是這樣的話,我會期待你看到的結果。

所以,要麼不使用FTS或更改FTS人口時間表,一些更可以接受的。

2

CONTAINS是一個全文謂詞和查找在根據當前語言的斷字規則的全文索引詞「ABC」。

LIKE掃描該列。

所以LIKE會找到'XABCX',而CONTAINS不會。

+0

好吧,我上面寫的代碼就是一個例子,其實我處理的地址,至極存儲在表像:_NameOfRegion_/_NameOfDistrict_/_NameOfCity_/_NameOfStreet_ – SergeyT

+0

它不會有所作爲,如果它的名稱或地址。但要澄清,CONTAINS(NAME,'ABC')和LIKE'%ABC%'不是同義詞。另請注意,全文索引是異步填充的,因此如果索引不是最新的,那麼這可能是您重複執行第一個查詢時看到的結果數量逐漸增加的原因。 – Jamey

+0

>如果是姓名或地址,這並沒有什麼不同。但要澄清,CONTAINS(NAME,'ABC')和LIKE'%ABC%'不是同義詞。是的,謝謝,我想我已經理解了它的區別>所以如果索引不是最新的,我剛剛完成了「啓動全部人口」功能的執行(我猜那件事把我的索引設置爲「最新」或者我誤解了?)現在_(1) - like-queries_似乎返回不變的結果。 – SergeyT