Tôi cần tìm nạp một số dữ liệu dựa trên từ khóa, truy vấn được kiểm tra chính xác 100%, nhưng sự cố là tải của reader
là khá chậm. Tôi đã thử thay thế truy vấn này bằng truy vấn không chứa inner join
và tải khá nhanh. Vì vậy, tôi tự hỏi, vì tôi chỉ chọn một cột là kết quả, tại sao DataTable.Load() mất quá nhiều thời gian? Có phải ExecuteReader
của SQLite
tải toàn bộ kết quả chứ không phải chỉ một cột không?Tải trình đọc dữ liệu rất chậm
Trước khi sử dụng DataTable, thời gian thực hiện trung bình mỗi reader.Read()
là 7 giây.
Đây là mã của tôi:
_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();
Có vẻ như truy vấn của bạn chỉ đơn giản là chậm. Có cách nào khác để truy cập các bảng của bạn sao cho bạn không phải thực hiện quá nhiều lần tham gia? – Tejs
Tôi biết điều này sẽ bị tổn thương .. Thật không may, chúng tôi cần kết nối 2 bảng dựa trên một trong các trường. Các phép nối này là kết nối duy nhất giữa chúng, với lược đồ DB hiện tại. – iCantSeeSharp
'_database' là gì và tại sao có các phương thức như' Connect' và 'Disconnect'? Đừng sáng tạo lại bánh xe. Bạn cũng nên sử dụng 'using-statement' cho kết nối của bạn để đảm bảo rằng nó được" đóng "càng sớm càng tốt. Đây có phải là môi trường đa luồng như ASP.NET không? –