【问题标题】:SQL query to select million records quicklySQL查询快速选择百万条记录
【发布时间】:2013-10-22 07:06:01
【问题描述】:

我想从一个表中选择百万条记录,我正在使用select 查询。

目前获取数据需要几分钟时间。能快点拿到吗?

我使用的是 SQL Server 2008 R2。

我的查询:

SELECT     
   sum(Orders.BusinessVolumeTotal) as  BusinessVolume, 
   sum(Orders.CommissionableVolumeTotal) as CommissionableVolume, 
   OrderTypes.OrderTypeDescription, 
   Orders.OrderTypeID
FROM  
   Orders 
INNER JOIN
   OrderTypes ON Orders.OrderTypeID = OrderTypes.OrderTypeID
WHERE
   Orders.OrderDate > convert(DATETIME, '{0}') 
   and Orders.OrderDate < convert(DATETIME, '{1}') 
GROUP BY
   Orders.OrderTypeID, OrderTypes.OrderTypeDescription

【问题讨论】:

  • 这在很大程度上取决于 (a) 你的表是什么样的,(b) 你有什么样的索引,(c) 你的查询是什么样的,以及 (d) 你的硬件是什么样的(服务器)支持......这个问题太宽泛无法回答......
  • 谢谢@marc_s,我已经编辑了我的问题。
  • 这仍然没有回答表和索引结构.....
  • 我没有使用索引,表有 29 列。
  • 见:technet.microsoft.com/en-us/library/…。在 SQL Server Mgmt Studio 中执行查询之前,请转到 Query &gt; Include Actual Execution Plan,您将获得查询执行方式的图形视图 - 这对于查看性能问题非常有帮助

标签: sql-server sql-server-2008-r2


【解决方案1】:

为您的表字段使用索引以快速获取数据。

参考:

http://www.tutorialspoint.com/sql/sql-indexes.htm

【讨论】:

  • 谢谢@Zeeshan,真的很有帮助
【解决方案2】:

有几个因素会影响到这一点。要查看的内容的快速列表:

  1. 服务器的速度。 CPU、内存、网络连接都是影响因素
  2. 如果您正在执行带有条件的 SELECT 语句(即使用 WHERE)或带有 JOINS 的语句,则拥有索引将提高您的性能,尤其是在具有数百万行的表上。哈希表将对大表产生巨大的净正面影响。
  3. 编写干净的查询。例如,如果您有大量需要从查询中排除的项目,请执行 LEFT JOIN 而不是使用 NOT IN 条件。

这实际上只是冰山一角,但一些最容易实现的东西也会为您提供一些最大的性能提升。

【讨论】:

    【解决方案3】:

    使用 SELECT 语句的 SQL 快速性能提示的最佳方式

    1:- 检查索引。 2:- SQL 语句的 WHERE 和 JOIN 部分中使用的所有字段都应该有索引 3:- 限制工作数据集的大小。 4:- 仅选择您根据需要选择的字段。 5:- 删除不必要的表和索引 6:- 删除外部连接。 7:- 删除 JOIN 和 WHERE 子句中的计算字段。

    【讨论】:

      【解决方案4】:

      查询的速度取决于行数,但如果您根据以下性能因素进行适当的优化:

      1. 索引集群/非集群
      2. 数据缓存
      3. 表分区
      4. 执行计划缓存
      5. 数据分布

      查询将执行得更快。

      【讨论】:

      • 你能给出每个案例的例子/链接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2013-09-25
      • 2020-05-31
      • 2016-03-06
      • 2019-02-28
      • 1970-01-01
      相关资源
      最近更新 更多