我需要根據關鍵字獲取一些數據,該查詢被測試爲100%準確,但問題是reader
的加載速度很慢。我試圖用一個不包含inner join
的查詢替換這個查詢,並且加載非常快。所以我想知道,因爲我只選擇一列作爲結果,爲什麼DataTable.Load()需要這麼多時間?加載整個結果的是SQLite
的ExecuteReader
而不僅僅是一列嗎?DataTable讀取器加載速度很慢
在使用DataTable之前,執行每個reader.Read()
的平均時間爲7秒。
這是我的代碼:
_database.Connect();
var selectCommand = new SQLiteCommand(
@"SELECT A.ID AS MY_ID FROM MD
INNER JOIN TMD ON MD.ID = TMD.ID_MD
INNER JOIN TR ON TR.ID = TMD.ID_TR
INNER JOIN P ON P.ID = TR.ID_P
INNER JOIN DP ON DP.ID_P = P.ID
INNER JOIN CD ON CD.ID = DP.ID_CD
WHERE CD.DESC = @desc"
);
selectCommand.Parameters.AddWithValue("@desc", value);
using (DbDataReader reader = _database.ExecuteQuery(selectCommand))
{
DataTable data = new DataTable("MyData");
data.Load(reader);
}
_database.Disconnect();
這聽起來像你的查詢是簡單的。有沒有不同的方式來訪問你的表,這樣你就不必做很多連接了? – Tejs 2012-07-10 13:53:34
我知道這會傷人..不幸的是,我們需要根據其中一個字段連接2個表格。鑑於當前的數據庫架構,這些連接是它們之間的唯一連接。 – iCantSeeSharp 2012-07-10 13:55:25
什麼是_database,爲什麼它有像Connect和Disconnect這樣的方法?不要重新發明輪子。您還應該爲連接使用'using-statement',以確保它儘快「關閉」。這是像ASP.NET這樣的多線程環境嗎? – 2012-07-10 13:55:55