SQL Server在堆栈溢出数据转储上运行查询时速度非常慢

SQL Server在堆栈溢出数据转储上运行查询时速度非常慢,sql,sql-server,database,sql-server-2008,optimization,Sql,Sql Server,Database,Sql Server 2008,Optimization,我将堆栈溢出数据转储导入SQLServer2008。有些查询,特别是Posts表上的查询,需要一分钟以上的时间才能返回 查询示例: SELECT Id, PostTypeId, AcceptedAnswerId, CreationDate, Score, ViewCount, Body, OwnerUserId, OwnerDisplayName, LastEditorUserId, LastEditDate, LastActivityDate, Title, Tags,

我将堆栈溢出数据转储导入SQLServer2008。有些查询,特别是Posts表上的查询,需要一分钟以上的时间才能返回

查询示例:

SELECT   
  Id, PostTypeId, AcceptedAnswerId, CreationDate, 
  Score, ViewCount, Body, OwnerUserId, OwnerDisplayName,
  LastEditorUserId, LastEditDate, LastActivityDate, Title,
  Tags, AnswerCount, CommentCount, FavoriteCount, ClosedDate, ParentId
FROM dbo.Posts
查询返回881665行,只需不到2分钟即可完成。我确实为这个表和其他表设置了索引。我能做些什么来加速这个过程吗?

因为您没有WHERE子句,所以您正在执行一个表扫描,它读取整个表。这将始终是相对缓慢的;索引一点帮助都没有

要加快查询速度,请选择less:尝试输入WHERE子句,以便您只对特定日期段内的特定标记或问题感兴趣。然后,您可以在这些列上放置索引以加快查询速度。

因为您没有WHERE子句,所以您正在执行表扫描,它读取整个表。这将始终是相对缓慢的;索引一点帮助都没有


要加快查询速度,请选择less:尝试输入WHERE子句,以便您只对特定日期段内的特定标记或问题感兴趣。然后可以在这些列上添加索引以加快查询速度。

如果要进行复制,请查看SqlBulkCopy API。我使用该API进行了一次从10分钟到4秒的插入

但杰里米是完全正确的。您希望运行一个超过800000个结果的查询,这些结果包含body列中的字符串。如果你不需要身体,那么你可能会大大加快结果

对于SQL Server,您使用的是什么硬件专用HDD。如果你把这样的一个DB放到你的C:\上,那么你就不会得到想要的结果


您是否启用了全文目录?如果您在文章中搜索,则此索引将显著提高您的速度。

如果您正在复制,请查看SqlBulkCopy API。我使用该API进行了一次从10分钟到4秒的插入

但杰里米是完全正确的。您希望运行一个超过800000个结果的查询,这些结果包含body列中的字符串。如果你不需要身体,那么你可能会大大加快结果

对于SQL Server,您使用的是什么硬件专用HDD。如果你把这样的一个DB放到你的C:\上,那么你就不会得到想要的结果


您是否启用了全文目录?如果您在文章中搜索,则此索引将显著提高您的速度。

您在衡量什么?显示第一行的时间或检索到881665行的时间?您在测量什么?显示第一行的时间或检索到881665行的时间?800K行并不难扫描;我敢打赌,80万行的转移花费了所有的时间。尝试将800K行文件变灰,即使没有索引也很快。扫描800K行并不难;我敢打赌,80万行的转移花费了所有的时间。尝试将800K行文件变灰,即使没有索引也很快。