0

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

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 列)

4

3 回答 3

1

您的查询是否返回许多行?

ASqlDataReader流式传输数据。调用可能GetValue正在等待更多行流入,并且由于查询更复杂,在第二种情况下需要更长的时间。

于 2010-09-17T14:46:09.467 回答
0

你能试一下吗

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

可能会提高你的表现

于 2010-09-17T15:16:50.330 回答
0

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

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

不管怎么说,还是要谢谢你

于 2010-09-20T08:13:55.760 回答