Potrzebuję pobrać niektóre dane na podstawie słowa kluczowego, zapytanie jest testowane do 100% dokładne, ale problem polega na tym, że ładowanie reader
jest dość powolne. Próbowałem zastąpić to zapytanie tym, który nie zawiera w ogóle inner join
s, a ładowanie było dość szybkie. Zastanawiam się, skoro w rezultacie wybieram tylko jedną kolumnę, dlaczego metoda DataTable.Load() zajmuje tyle czasu? Czy to jest SQLite
, który ładuje całe wyniki, a nie tylko jedną kolumnę?Ładowanie czytnika danych jest bardzo powolne.
Przed użyciem DataTable średni czas wykonywania każdego z nich wynosił 7 sekund.
To jest mój kod:
_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();
Wygląda na to, że zapytanie jest po prostu powolne. Czy jest inny sposób dostępu do twoich stołów, tak że nie musisz robić tak wielu złączeń? – Tejs
Wiedziałem, że to będzie bolało ... Niestety musimy połączyć 2 tabele w oparciu o jedno z pól. Te połączenia są jedynym połączeniem między nimi, biorąc pod uwagę bieżący schemat bazy danych. – iCantSeeSharp
Co to jest "_database" i dlaczego ma takie metody jak 'Connect' i' Disconnect'? Nie wymyślaj ponownie koła. Powinieneś również użyć instrukcji "using-statement" dla swojego połączenia, aby upewnić się, że zostanie "zamknięte" tak szybko, jak to możliwe. Czy jest to środowisko wielowątkowe, takie jak ASP.NET? –