キーワードに基づいてデータを取得する必要がありますが、クエリは100%正確にテストされていますが、問題はreader
の読み込みがかなり遅いことです。私はinner join
が全く含まれていないものでこのクエリを置き換えようとしましたが、ロードはかなり高速でした。結果として1つの列しか選択しないので、なぜDataTable.Load()に時間がかかるのですか? SQLite
のExecuteReader
は、1つの列だけでなく結果全体をロードしますか?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
私はこれが痛いことを知っていた。残念ながら、フィールドの1つに基づいて2つのテーブルを接続する必要があります。これらの結合は、現在のDBスキーマを考慮すると、それらの間の唯一の接続です。 – iCantSeeSharp
'_database'とは何ですか?なぜ、' Connect'や 'Disconnect'のようなメソッドを持っていますか?車輪を再構築しないでください。また、接続のために 'using-statement'を使用して、できるだけ早く「閉じられる」ようにする必要があります。これはASP.NETのようなマルチスレッド環境ですか? –