查询返回不同的结果

问题描述:

我有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

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

这是完全有可能的是,FTS索引正在重建在该查询的运行之间。如果是这样的话,我会期待你看到的结果。

所以,要么不使用FTS或更改FTS人口时间表,一些更可以接受的。

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