【问题标题】:SQL Server is extremely slow when running queries on the Stack Overflow data dump在 Stack Overflow 数据转储上运行查询时,SQL Server 非常慢
【发布时间】:2010-11-24 02:54:13
【问题描述】:

我将 Stack Overflow 数据转储导入 SQL Server 2008。一些查询,尤其是在 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 分钟即可完成。我确实为此表和其他表设置了索引。我能做些什么来加快这件事的速度吗?

【问题讨论】:

  • 你在测量什么?是显示第一行的时间还是检索到第 881,665 行的时间?

标签: sql sql-server database sql-server-2008 optimization


【解决方案1】:

因为您没有WHERE 子句,所以您正在执行表扫描,它会读取整个表。这总是相对较慢;索引根本没有帮助。

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

【讨论】:

  • 800K 行扫描并不难;我敢打赌,这是 800K 行的 transfer 一直占用的时间。尝试 grepping 一个 800K 行的文件,即使没有索引也很快。
【解决方案2】:

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

但是杰里米是完全正确的。您期望运行超过 800000 个包含字符串(正文列)的结果的查询。如果您不需要身体,那么您可能会显着加快结果。

您为 SQL Server 使用的硬件(特别是 HDD)。如果您将这样的数据库推到您的 C:\ 上,那么您将不会得到想要的结果。

您还启用了全文目录吗?如果您在帖子文本中进行搜索,那么此索引将显着提高您的速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多