.net SqlDataReader.GetValue是否依赖于查询?

.net SqlDataReader.GetValue是否依赖于查询?,.net,performance,sqldatareader,.net,Performance,Sqldatareader,在我的代码中有这样一个查询 SELECT id,name FROM people 我使用sqldatareader检索数据 如果我更改对的查询 SELECT id,name FROM people WHERE NOT EXISTS( SELECT * FROM people_died WHERE people_died.id = people.id ) 我可以通过dotTrace看到第二个查询对getvalue的调用需要更长的时间,所以我想知道为什么 如果您绝对确定这不是一个好的理由,您能告

在我的代码中有这样一个查询

SELECT id,name
FROM people
我使用sqldatareader检索数据

如果我更改对的查询

SELECT id,name
FROM people
WHERE NOT EXISTS(
SELECT *
FROM people_died
WHERE people_died.id = people.id
)
我可以通过dotTrace看到第二个查询对getvalue的调用需要更长的时间,所以我想知道为什么

如果您绝对确定这不是一个好的理由,您能告诉我什么可能会影响SqlDataReader.getValue的性能吗

谢谢


编辑:是否可能取决于表“人员”中不在查询中的列?(例如,此表中有很多ntext列)

您的查询返回的行数多吗

一个
SqlDataReader
流式处理数据。可能是
GetValue
调用正在等待更多的行流入,而在第二种情况下,由于查询更复杂,这需要更长的时间。

您能试试吗

SELECT p.id,name
FROM people p left join people_died d
on p.id = d.id
WHERE d.id is null

可能会提高您的绩效

我的问题有一个答案:是的

在我最初的查询中,我有一个非常非常大的In子句(大约1400 id),我删除了这个子句,现在对getValue的调用有了一个正常的执行时间,所以我必须找到一个解决方法


无论如何谢谢你

总共有1400行,每行我都会调用getvalue 10次。我不明白:查询只执行一次,它在获取数据时不应该执行查询。这与查询本身无关:如果我比较ExecuteReader的执行时间,我得到了几乎相同的结果(我尝试过。sqldatareader有一些不明确的地方)。