2010-09-17 82 views
0

在我的代碼我有這樣SqlDataReader.GetValue查詢是否依賴?

SELECT id,name 
FROM people 

我檢索使用一個SqlDataReader DATAS查詢。

如果我改變我的

SELECT id,name 
FROM people 
WHERE NOT EXISTS(
SELECT * 
FROM people_died 
WHERE people_died.id = people.id 
) 

查詢我可以用dotTrace看到到的GetValue調用與第二個查詢需要更長的時間,所以我想知道爲什麼...

如果你絕對相信這不是很好的理由,你能告訴我什麼可能會影響SqlDataReader.getValue的性能嗎?

感謝

編輯:是否有可能,這取決於列從不在查詢表「人」? (有很多ntext列在這個表中的實例)

回答

0

我有一個回答我的問題:是

在我原來的查詢我有一個非常非常大的IN子句(約1400 ID),我刪除了這一條款,並調用的getValue現在有一個正常的執行時間,所以我無論如何都要找到一個變通

感謝

1

請問您的查詢返回多少行?

SqlDataReader流中的數據。有可能GetValue調用正在等待更多行進行流式處理,並且由於查詢更復雜,第二種情況需要更長的時間。

+0

有1400行,每行調用getvalue 10次。我不明白:查詢只執行一次,它不應該在獲取數據時執行查詢。 – 2010-09-17 15:03:33

0

你可以嘗試

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

可能會提高你的表現

+0

這不是查詢本身:如果我比較的ExecuteReader的執行時間,我得到了幾乎相同的結果(我想也有一些是SqlDataReader的是不明確的。 – 2010-09-17 15:29:14