【问题标题】:How to select large data from SQL Server 2008 R2?如何从 SQL Server 2008 R2 中选择大数据?
【发布时间】:2012-02-22 09:38:20
【问题描述】:

我在从 SQL Server 中选择大数据时遇到了问题。我有一个 200 列和 200 000 行的视图。我正在使用 Solr 索引的视图。

我尝试通过分页来选择数据,但花了很多时间(超过 6 小时)。现在我在不分页的情况下选择它,它需要 1 小时。但是 SQL Server 占用大量内存。

在这种情况下,从 SQL Server 2008 R2 中选择大数据的最佳方法是什么?

提前致谢。

【问题讨论】:

  • 您能否发布您正在使用的查询,向我们展示您是如何进行分页和过滤的?
  • 这里是分页代码WITH SpecialTable AS ( SELECT ROW_NUMBER() OVER (ORDER BY DataId) AS 'RowNumber', * FROM [dbo].[Data] ) SELECT * FROM SpecialTable WHERE RowNumber BETWEEN {0} AND {1};
  • 将您的简单示例改编为包含 7340 万行的索引(在 sql 中)表。选择前 1000 是次秒。假设服务器资源没有严重不足,您可能会遇到索引问题。
  • 如果您在管理工作室中运行该查询并返回 1 行并且需要 1 小时,那么您的 DBA 需要仔细查看数据库/服务器,看看它是否适合目的。它没有任何问题;如果您要向用户返回 200k 行,请考虑它是否是呈现它的最佳方式。如果您正在处理 200k 行,可以在数据库引擎中完成吗?如果所有这些都不是,我会查看网络速度并找出如何改进它。

标签: sql-server-2008 c#-4.0


【解决方案1】:

200k 行并不多,绝对不应该花费 6 小时,甚至 1 小时。 我不明白问题是出在实际选择上还是将结果带到应用程序中。 我建议使用 NOLOCK 运行 select 以忽略阻塞,当您运行查询时,可能您的表正在被其他进程访问

SELECT * FROM TABLE WITH(NOLOCK)

如果问题在于将数据带入应用程序,您需要提供有关您如何执行此操作的 mroe 详细信息

【讨论】:

    【解决方案2】:

    我建议您查看一下您的执行计划。查看第一个运算符中的属性,看看您是否得到“找到足够好的计划”或超时。如果是后者,您可能有一个非常复杂的视图,或者您可能正在嵌套视图(视图调用视图)。看看你可以做些什么来简化查询,以便让优化器有机会创建一个好的执行计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多