0

我有一张product表,其中有很多列。主键是productid. 有 50,000 行,但是当我发出这样的选择语句select * from products时,需要 10 分钟才能获取完整数据。所以请告诉我该怎么做,这样我可以更快地运行我的查询。

4

3 回答 3

0

您的主键也是该表上的集群键吗?

如果你这样做,SELECT * ....你基本上总是会得到一个全表扫描。真的没有什么可以加快查询速度——你想要所有的行、所有的列——所以你得到了所有的东西,这需要花费时间。

如果您进行更多“重点”查询,例如

SELECT col1, col2 FROM dbo.Products WHERE SomeColumn = 42

那么您就有机会通过使用适当的索引来加快速度。

于 2012-07-03T09:23:53.937 回答
0

买一台更好的电脑。

严重地。

SQL Server 2000 已于多年前停用,因此这是一个旧安装。50.000 个产品是个笑话——任何低于 100 万个的表都不算什么。

但是,当我发出 select * from products 之类的选择语句时,需要 10 分钟才能获取完整数据。

假设这是通过 LAN,而不是通过缓慢的 Internet 连接,可能有两个原因:

  • 系统严重超载。像严重超载。不像我在旧设置上没有看到过。去过那里,看到了 - 硬盘超载(嘿,它们是 SCSI,它们速度很快)以至于它们需要超过 2 秒才能响应请求。
  • 系统是由不称职的人编写的。可能是糟糕的事务级别处理导致长时间的可怕锁定,从而阻止您。这是可能的,但是您需要进行大量的返工才能将荒谬的代码从编程中删除。

select * from table 不应该花费超过几秒钟的时间来通过 LAN 传输所有数据。观点。除非这个包有大量的二进制数据(即某些领域的大量数据)。

作为您当地的数据库专家进行分析。从硬件负载开始,然后转向锁定行为。考虑升级到更现代的技术,现在你落后了很多代。

于 2012-07-03T09:24:38.453 回答
-2

因为没有标准(WHERE),所以您的查询所花费的时间不是由于选择(确定要选择哪些行),而是很可能是由于数据的绝对大小。

唯一的解决办法是:

不要使用SELECT *,而只选择您需要的列。

于 2012-07-03T09:25:55.347 回答