【发布时间】:2011-05-29 16:45:57
【问题描述】:
我在 Sql Server 2008 中使用全文索引。我创建了索引、目录并完全填充它。 我的表有近 400,000 条记录。我的全文索引被定义为一个 varchar(Max) 列(现在我们称之为 Text)。我正在执行以下查询:
从 MyTable 中选择 * where contains(Text, 'house').
此查询在 14 秒内返回近 20,000 条记录。我认为那很慢。但是,当我执行这个查询时:
从 MyTable 中选择 Count(*) where contains(Text, 'house')
显示结果仅需 1 秒。
我一直在寻找,据我所知,两个查询的执行计划是相同的。 为什么Sql Server 会花那么多时间来显示第一个查询结果?
我已经做了什么:
我买了一个 SSD 并将 mdf 和 ldf 都放在这个磁盘上。但是当我执行第一个查询时,我可以看到正在我的 HDD(而不是 SSD)上创建日志和 tmp 数据库。我的 SSD 是 D:,所有临时文件都在 C: 创建。
这是因为 sql 需要这些文件来填充企业管理器结果网格而需要这么长时间吗?我能做些什么来优化数据库吗?我真的需要在 2 秒内运行查询。
【问题讨论】:
-
是在一台机器上完成所有工作,还是通过网络传输数据?
-
还有一个问题:这个 14 秒的数字是完成将结果集返回到 SSMS 窗口所需的时间,还是开始在其中显示值所需的时间?
-
完成将结果集返回到我的 SSMS 所需的时间
-
一切都在一台机器上完成。
标签: sql-server full-text-search