我有一张表MyTable
,有29,000行。
MyTable structure {
StudentId bigint,
....
}
列数> 10列。托管服务器中的数据库。
从SSMS执行查询:
SELECT *
FROM MyTable
执行持续时间超过5分钟是否正常?
答案 0 :(得分:2)
首先,从远程数据库中检索所有数据绝不是一个好主意。您正在使用重要的带宽份额。希望您使用的查询仅用于调试目的,不应该生产。
您没有提到在开始接收内容之前花了5分钟,或者您是否在5分钟内以恒定速率接收数据。
在第一种情况下,由于其他操作,根本没有接收行可能表示锁对您的表有效。
在后一种情况下,您不断收到行,但速度很慢。带宽和服务器负载在其中起着重要作用。为了让您大致了解下载的数据量,请运行以下存储过程:
EXEC sp_spaceused 'YourTableName';
考虑服务器必须上传该数据,并且您必须下载数据。
二进制和xml字段(也称为BLOB字段)通常会占用大量数据,您可能无法控制用户在这些字段中存储的数据量。
尝试通过在列上运行DATALENGTH来检查变量长度字段(varchar,xml和varbinary)的大小:
SELECT DATALENGTH(MyField) FROM MyTable
您还可以获得平均值:
SELECT AVG(DATALENGTH(MyField)) FROM MyTable
关于BLOB字段的一个好主意是只在needer时检索它们,而不是在加载数据列表时检索它们。
例如,假设存储在PurchaseOrder
表中的XML字段。如果您希望向用户显示PO列表,通常不需要检索该字段,除非用户打开PO。
许多最近的ORM,如nHibernate,为列提供延迟加载,以及分页,因此您可以检索少量行。
Ayende posted a rent关于在两周前加载无限结果集。
答案 1 :(得分:0)
你是对的 - 选择查询不应该花那么长时间。这不是行数。可能它是你在该表/视图上获得的数据类型,也许是存储配置(慢速磁盘,文件组配置等)。
要考虑解决此性能问题的一些想法:
SELECT *
很好,但是要认识到RDBMS会稍微努力确定表/视图中的哪些列。text
,varbinary
的任何列的值将按比例缩短。如果您编辑问题,可能包括完整的表定义,以便我们可以真实地了解数据类型发生的情况。
答案 2 :(得分:0)
我建议您考虑OMG小马的建议 - 可能是由于盒子和机器之间的带宽,所以