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