Sql server SQLServer2008全文优化

Sql server SQLServer2008全文优化,sql-server,full-text-search,Sql Server,Full Text Search,我在SQLServer2008中使用全文索引。我创建了索引、目录并完全填充它。 我的桌子上有将近40万条记录。我的全文索引被定义为一个varcharMax列,现在我们称之为text。我正在执行以下查询: 从MyTable中选择* “房子”在哪里 此查询在14秒内返回近20000条记录。我认为这很慢。但是,当我执行此查询时: 从MyTable中选择Count* “房子”在哪里 显示结果只需1秒 我一直在寻找,据我所知,这两个查询的执行计划是相同的。 为什么Sql Server要花费那么多时间来显示

我在SQLServer2008中使用全文索引。我创建了索引、目录并完全填充它。 我的桌子上有将近40万条记录。我的全文索引被定义为一个varcharMax列,现在我们称之为text。我正在执行以下查询:

从MyTable中选择* “房子”在哪里

此查询在14秒内返回近20000条记录。我认为这很慢。但是,当我执行此查询时:

从MyTable中选择Count* “房子”在哪里

显示结果只需1秒

我一直在寻找,据我所知,这两个查询的执行计划是相同的。 为什么Sql Server要花费那么多时间来显示第一个查询结果

我已经做了:

我买了一个SSD,把mdf和ldf都放在这个磁盘上。但是当我执行第一个查询时,我可以看到日志和tmp数据库是在我的HDD上创建的,而不是在SSD中。我的SSD是D:并且所有临时文件都是在C:上创建的


这是否因为sql需要这些文件来填充enterprise manager结果网格而花费了这么长时间?我能做些什么来优化数据库吗?我真的需要查询在2秒内运行。

有什么理由需要返回20000条记录吗?您是否可以将分页添加到查询中,以便以20、100、1000或小于20000的数据块返回结果集?无论您优化了多少,返回这么大的结果集都需要时间。

有什么原因需要返回20000条记录吗?您是否可以将分页添加到查询中,以便以20、100、1000或小于20000的数据块返回结果集?无论您优化了多少,返回这么大的结果集都需要时间。

查询的额外时间可能来自于在Management Studio中填充网格

请记住,当您执行SELECT*操作时,也会在网格结果中包含文本列本身。尝试只选择文本列以外的列,您可能会看到执行时间的下降更接近SELECT COUNT*查询的时间。您可能还希望在选择列表中包含DATALENGTHText


ManagementStudio中还有一个选项,用于控制检索到网格中的最大字符数。您可以在工具->选项->查询结果->结果到网格下找到它

查询的额外时间可能来自于在ManagementStudio中填充网格

请记住,当您执行SELECT*操作时,也会在网格结果中包含文本列本身。尝试只选择文本列以外的列,您可能会看到执行时间的下降更接近SELECT COUNT*查询的时间。您可能还希望在选择列表中包含DATALENGTHText


ManagementStudio中还有一个选项,用于控制检索到网格中的最大字符数。您可以在工具->选项->查询结果->结果到网格下找到它

您真的需要显示所有这些文本,还是希望对结果运行更多查询并进一步缩小范围?我假设14秒钟中的大部分时间用于显示结果-如果您不需要显示结果或只想显示这些结果的某个子集,则执行时间应该缩短。

您真的需要显示所有这些文本,还是希望对结果运行更多查询并进一步缩小范围?我假设14秒钟中的大部分时间都用于显示结果-如果您不需要显示结果或只想显示这些结果的某个子集,则执行时间应该缩短。

我同意Christian的观点。您的问题在于结果的呈现。尝试输出到文本而不是网格,以消除一些开销。

我同意Christian的观点。您的问题在于结果的呈现。尝试输出到文本而不是网格以消除一些开销。

我想我可以使用1000个块。我尝试了选择前1000个,但花了4秒钟。。。它仍然非常慢。1000条记录仍然很大程度上取决于表中的数据。假设每行有1000个字符的文本。这大约是每行1千字节的文本。仅对于列而言,1000行就相当于1MB。我不知道你的数据是什么样子,但可能就是这样。您是否在网格中向用户显示此数据?如果是这样的话,那么将结果限制在每页20个左右是有意义的……但我不知道您的具体场景是什么,所以这可能不合适。我不会在网格中显示它们。我正在使用它填充其他表。很难向你解释,但我需要所有的搜索结果。我想我可以使用1000块。我尝试了选择前1000,但花了4秒钟。。。它仍然非常慢。1000条记录仍然很大程度上取决于表中的数据。假设每行有1000个字符的文本。这大约是每行1千字节的文本。1000
仅对于列而言,行的大小就为1MB。我不知道你的数据是什么样子,但可能就是这样。您是否在网格中向用户显示此数据?如果是这样的话,那么将结果限制在每页20个左右是有意义的……但我不知道您的具体场景是什么,所以这可能不合适。我不会在网格中显示它们。我正在使用它填充其他表。很难向您解释,但我需要所有搜索结果。是在一台机器上完成所有操作,还是在网络上传输数据?还有一个问题:14秒的数字,是将结果集返回到SSMS窗口所需的时间,或者开始在其中显示值所需的时间?将结果集返回到我的SSMSIt所需的时间是在一台机器上完成的所有操作。是在一台机器上完成的所有操作,还是在网络上传输数据?还有一个问题:14秒的数字,这是完成将结果集返回到SSMS窗口所需的时间,还是开始在其中显示值所需的时间?这是完成将结果集返回到我的SSMSIt所需的时间。所有操作都是在一台机器上完成的。你知道这个问题有4年以上的历史,对吗?你知道这个问题有4年以上的历史,正当