我正在使用VSTS 2008 + C#+。Net 3.0 + ADO.Net + SQL Server 2008.从ADO.Net我调用SQL Server端的存储过程。存储过程是这样的,
SELECT Table1.col2
FROM Table1
LEFT JOIN Table2 USING (col1)
WHERE Table2.col1 IS NULL
我的问题是,如何有效地检索返回的行(我的样本中的Table1.col2)?我的结果最多可返回5,000行,Table1.col2的数据类型为nvarchar(4000)。
提前谢谢, 乔治答案 0 :(得分:7)
你不能 - 你永远不能有效地检索那么多数据......
高效的全部意义是限制你检索的数据 - 只有那些你真正需要的列(没有SELECT *,但是你已经做过的SELECT(字段列表)),以及只有你那么多的行可以轻松处理。
例如,您不希望填充下拉列表或列表框,其中用户需要选择包含数千个条目的单个值 - 这是不可行的。
所以我想我的观点确实如此:如果真的,真的需要返回5000行或更多,它只需要花时间。你可以做的事情并不多(如果你传输5000行,每行5000字节,那就是25'000'000字节或25兆字节 - 没有什么魔法可以让它快速发展)。
如果你找到一种方法来限制返回到10,20,50左右的行数,它只会非常快。想一想:服务器端分页!! : - )
马克
答案 1 :(得分:4)
您没有说出您想要对数据做什么。但是,假设您需要在.NET中处理结果,那么使用SqlDataReader读取结果将是最有效的方法。
答案 2 :(得分:2)
我使用exists for one。
SELECT
Table1.col2
FROM
Table1
WHERE
NOT EXISTS (SELECT *
FROM
Table2
WHERE
Table2.col1 = Table1.col1)
查询效率很高(假设col1已编入索引,但涵盖了cols(当然索引很宽),但您仍需要通过网络挖掘大量数据。
这取决于你的表现。 5000行对于报表来说并不多,但对于组合框来说却是很多