表中有400万行数据

时间:2015-02-10 12:02:56

标签: sql

我在表格中有400万行数据并运行此查询

Select * from B

当我检查cpu使用情况时,此查询获得高CPU使用率。我的问题是如何在这个SQL查询中提高cpu使用率?

2 个答案:

答案 0 :(得分:3)

您是否可能读取包含四百万行的报告? 肯定不会。

如果没有,为什么生成呢?

如果您为了备份目的而倾倒整个表格,可能有更好的方法,特定于您正在使用的DBMS。

如果您需要所有数据(或者甚至是所有数据),可以使用任何可以限制出现的数据(例如{ {1}}子句限制行和/或更多选择性列选择比where)应该帮助你,正确的索引也是如此,因此可以加快select *子句中的条件。如果数据正在通过网络传输,那么尤其为真,您不希望通过网络发送不需要的千兆字节。

如果确实希望同时以正常输出格式显示所有四百万行中的所有列,那么您只需要遭受性能损失。数据库提供了各种有效获取数据的方法,但是,如果你想要这些数据,他们可以做的并不多。

话虽如此,有办法减轻影响,但这取决于你如何设置。一些例子是:

  • 复制数据库,使用主副本实现其预期目的,并使用从属副本进行报告。然后点击副本不会影响主副本。
  • 如果你可以执行一些较小的查询而不是一个较大的查询来获得相同的结果,那么这是一种可能性。例如,一个查询可以获取2015年的所有记录,另一个查询可以获得2014年的记录,等等。

这是我头脑中的两件事,毫无疑问还有其他事情,但是,如果不了解更多细节,很难提出具体建议。

答案 1 :(得分:0)

非常简单地减少你的生成。

限制选择

SELECT TOP (100) * FROM B

包含where子句

SELECT * FROM B WHERE COLA = XXX AND COLB = YYY

指定列

SELECT COLA, COLB, COLC, COLD FROM B WHERE COLA = XXX AND COLB = YYY

或者,如果你必须返回所有400万行。

创建一个视图,填充临时表并设置一个作业,在“停机时间”,半夜等运行,然后从临时表中选择