Ho bisogno di recuperare alcuni dati in base a una parola chiave, la query è testata al 100% preciso, ma il problema è il caricamento del reader
è piuttosto lento. Ho provato a sostituire questa query con una che non contiene inner join
s e il caricamento è stato piuttosto veloce. Quindi mi chiedo, dal momento che sto selezionando solo una colonna, perché DataTable.Load() richiede così tanto tempo? È lo di che carica l'intero risultato e non solo l'una colonna?Il caricamento del lettore DataTable è molto lento
Prima di utilizzare il DataTable, il tempo medio di esecuzione di ogni reader.Read()
era 7 secondi.
Questo è il mio codice:
_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();
Sembra che la query sia semplicemente lenta. C'è un modo diverso di accedere alle tue tabelle in modo tale da non dover fare così tanti join? – Tejs
Sapevo che questo avrebbe fatto male .. Purtroppo abbiamo bisogno di collegare le 2 tabelle in base a uno dei campi. Questi join sono l'unica connessione tra loro, dato lo schema DB attuale. – iCantSeeSharp
Che cos'è '_database' e perché ha metodi come' Connect' e 'Disconnect'? Non reinventare la ruota. Dovresti anche usare un 'using-statement' per la tua connessione per assicurarti che venga" chiuso "il prima possibile. È un ambiente multithreading come ASP.NET? –