.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有一些不明确的地方)。