SQL Server在堆栈溢出数据转储上运行查询时速度非常慢
我将堆栈溢出数据转储导入SQLServer2008。有些查询,特别是Posts表上的查询,需要一分钟以上的时间才能返回 查询示例: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,
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行文件变灰,即使没有索引也很快。