Performance 如何加速简单的SQL Server 2000查询

Performance 如何加速简单的SQL Server 2000查询,performance,sql-server-2000,Performance,Sql Server 2000,我有一个product表,它包含了尽可能多的列。主键是productid。有50000行,但当我发出select语句,如select*from products时,需要10分钟才能获得完整数据。因此,建议我如何做,这样我可以更快地运行查询。您的主键也是该表上的聚类键吗 如果您执行选择*…,您基本上会始终得到一个完整的表扫描。没有任何东西可以加快查询速度—您需要所有行、所有列—因此您可以得到所有行、所有列,并且需要花费时间 如果您执行更“集中”的查询,如 SELECT col1, col2 FRO

我有一个
product
表,它包含了尽可能多的列。主键是
productid
。有50000行,但当我发出select语句,如
select*from products
时,需要10分钟才能获得完整数据。因此,建议我如何做,这样我可以更快地运行查询。

您的主键也是该表上的聚类键吗

如果您执行
选择*…
,您基本上会始终得到一个完整的表扫描。没有任何东西可以加快查询速度—您需要所有行、所有列—因此您可以得到所有行、所有列,并且需要花费时间

如果您执行更“集中”的查询,如

SELECT col1, col2 FROM dbo.Products WHERE SomeColumn = 42
然后通过使用适当的索引,您有机会加快速度。

购买更好的计算机

真的


SQLServer2000多年前就已退役,因此这是一个旧安装。5万件产品只是一个笑话——任何低于100万的表格都算不了什么

但当我发布select语句(如select*from products)时,需要10分钟 获取完整的数据

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

  • 系统严重超载。比如严重超载。不像我在以前的设置中没有看到的那样。在那里,看到了-硬盘过载(嘿,它们是SCSI,它们很快),以至于它们花了2秒钟以上的时间来响应请求
  • 这个系统是由不称职的人编制的。可能是错误的事务级别处理导致长时间的可怕锁定,从而阻止您。这是可能的,但随后您需要进行大量的返工,才能从编程中获得荒谬的代码
select*from表通过LAN传输所有数据的时间不应超过几秒钟。指向除非捆有成吨的二进制数据(即在某些字段中有大量数据)


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

< P>因为没有标准(WHERE),你的查询所花费的时间不是由于选择(决定选择哪行),而是最可能是由于数据的绝对大小。 唯一的解决办法是:

不要使用
SELECT*
,只选择所需的列


有多少字段,类型是什么<代码>*通常返回的列太多。而且。。。如果其中一个恰好是
图像
BLOB
,那么它可能是您的热点。您真的需要一个select语句中的所有行和所有列吗?确定实际要选择的内容和要筛选的内容,并为最终select语句中引用的列创建相关索引。有多少列?什么样的专栏?有没有博客领域?只选择列的一个子集有更好的性能?听起来像是网络问题。其他原因可能是:sql server内存不足;超载的sql server(该框上还运行着什么?);错误的存储(错误纠正太多),我怀疑HDD db碎片可能是问题所在,因为只有少量的数据。5万行算不了什么。看看你能以多快的速度从你的电脑上拖放一个文件。@TomTom这可能是多种问题的组合,但如果没有OP的澄清,我们永远不会知道:-)对不起,表中有50000行,10分钟-即使索引为零,也不应该需要10分钟。现实一点-这不是一个糟糕的索引,至少是单独的。@TomTom如果有blob等,你不知道列是什么类型。这可能需要很长时间。我的回答实际上是这样的-但这不太可能,特别是通常Select*from字段不会传输blob数据,抱歉。Blob数据需要显式读取。是,存在图像字段。但若我从product中编写类似SELECTTITLE、OERef、VMRef的查询,那个么它也需要3分钟。产品id字段在此处为pk。我的数据库在另一台通过internet访问的机器上……这可能是原因吗?我很困惑有什么好的出路吗??“50000个产品是个笑话-任何低于100万的表格都算不了什么。”我会说这取决于列的数量(和大小)。我说不。真的。这就像说“好吧,一个小盒子不会很重”,而当“很多”开始变成100吨时,yo-uay“取决于你放进了什么”。除非您的二进制/文本字段每个都有数百兆字节,否则它不取决于列数。它们可能会在0.05秒和0.5秒之间产生差异,但不会在0.05秒和10分钟之间产生差异。如果只会发生表(或聚集索引)扫描(从未应用筛选器的表中进行选择时应如此),则运行时间在很大程度上取决于数据传递的速度。一个选项是提高此速度(网络速度、磁盘速度等),另一个选项是减少需要传输的数据量(即减少列数)。我同意你的观点,数据库专家的分析是正确的。是的,但是50000行即使每行8kb也不需要10分钟来加载。明白了。这是一种方式。你的差距是50到100倍。即使每行8公里,也不应运行10分钟。而且他没有说这是唯一的事情。它本身与数据量无关。是的,有图像字段。但若我从product中编写类似SELECTTITLE、OERef、VMRef的查询,那个么它也需要3分钟。产品id字段在此处为pk。我的数据库在另一台通过internet访问的机器上……这可能是原因吗?我很困惑,有什么好办法吗?太大了?对不起,您试图用汽车运输的东西太多了。没办法装在一个小盒子里?50000行是s