如何从存储过程中有效地检索数千行
问题描述:
我正在使用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在我的示例中)?我的结果可能会返回多达5000行,并且Table1.col2的数据类型是nvarchar(4000)。
由于事先 乔治
答
您CAN NOT - 你永远无法检索大量数据有效....
的是高效的整点是限制你检索数据 - 仅那些你真正需要的列(没有SELECT *,但SELECT(字段列表),你已经做了),只有你可以轻松处理的行数。
例如,您不想填充下拉列表框或列表框,用户需要用数千个条目选择一个值 - 这是行不通的。
所以我想我的观点确实是:如果你确实需要返回5000行或更多,它只需要花时间。对此你可以做的事情不多(如果你传输5000行,每行5000个字节,这是25'000'000字节或25兆字节 - 没有魔法去让它走得快)。
如果你找到一种方法来限制返回到10,20,50的行数,它只会变得非常快。想想:服务器端分页! :-)
Marc
答
我会使用一个存在。
SELECT
Table1.col2
FROM
Table1
WHERE
NOT EXISTS (SELECT *
FROM
Table2
WHERE
Table2.col1 = Table1.col1)
查询可以是有效的(假定COL1被索引,而是涵盖课程的cols(很宽的指数),但你仍然有通过网络铲大量的数据。
这取决于你5000行对于报告并不多,但对于组合框来说很多
您正在使用带有该语法的SQL Server 2008? – gbn 2009-07-19 13:12:53
我的伪代码是什么问题? – George2 2009-07-19 13:13:44
没问题,但是它会混淆人们,因为这是其他数据库引擎的有效语法 – gbn 2009-07-19 13:18:01