我需要根据关键字获取一些数据,该查询被测试为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