Sql 表中有400万行数据

Sql 表中有400万行数据,sql,Sql,我在一个表中有400万行数据,我运行这个查询 Select * from B 当我检查cpu使用率时,这个查询会得到高cpu使用率。我的问题是如何在这个SQL查询中提高cpu使用率?您可能会阅读包含400万行的报告吗?我当然不会 如果没有,为什么要生成它 如果为了备份之类的目的转储整个表,可能有更好的方法,具体到所使用的DBMS 如果您不需要所有数据(甚至一次不需要所有数据),任何可以用来限制输出的数据的东西(例如where子句来限制行和/或比select*更具选择性的列选择)都应该可以帮助您

我在一个表中有400万行数据,我运行这个查询

Select * from B
当我检查cpu使用率时,这个查询会得到高cpu使用率。我的问题是如何在这个SQL查询中提高cpu使用率?

您可能会阅读包含400万行的报告吗?我当然不会

如果没有,为什么要生成它

如果为了备份之类的目的转储整个表,可能有更好的方法,具体到所使用的DBMS

如果您不需要所有数据(甚至一次不需要所有数据),任何可以用来限制输出的数据的东西(例如
where
子句来限制行和/或比
select*
更具选择性的列选择)都应该可以帮助您,适当的索引也可以帮助您加快
where
子句中的条件。如果数据是“通过线路”传输的,则尤其如此,您不希望通过网络发送不需要的千兆字节

如果您真的希望所有四百万行中的所有列同时以正常的输出格式输出,那么您将不得不承受性能损失。数据库提供了各种有效获取数据的方法,但是,如果你想要很多数据,它们也无能为力

话虽如此,还是有办法减轻影响的,但这取决于你是如何安排的。例如:

  • 复制数据库,将主副本用于预期目的,并使用从属副本进行报告。那么命中副本不会影响主副本
  • 如果您可以执行多个较小的查询而不是一个较大的查询来获得相同的结果,那么这是一种可能性。例如,一个查询获取2015年的所有记录,另一个查询在经过一段休息时间后获取2014年的记录,依此类推

这是我脑子里想不到的两件事,毫无疑问还有其他的,但是,在不知道更多细节的情况下,很难给出具体的建议。

非常简单地减少你的工作量

限制选择

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万行


创建一个填充临时表的视图,并用它设置一个在“停机时间”、午夜等期间运行的作业,然后从临时表中选择-医生,我这样做会很痛那么就不要这样做。使用
limit 100
top100
类似的SQL(Microsoft、Oracle、mySQL)还有,表B中是什么?它是否包含大量列?您要用400万行做什么?您要用这400万行做什么?为什么要使用
Select*from table
?我总是在查询中使用where子句,而且我在where子句的常用列上有索引。我从来没有遇到过任何问题,只是为了提供信息,我的表包含了大约120M条记录和200列。我也会不时删减我的数据。@Ahmad,你指的是哪个“那”?我已经用很多额外的信息更新了答案。我需要所有的数据,但我要说的是如何在sql中执行cpu?@Ahmad,如果你真的需要所有的数据,这两个要点应该是一个好的开始。