Necesito recuperar algunos datos en base a una palabra clave, la consulta se prueba al 100% de precisión, pero el problema es que la carga del reader
es bastante lenta. He intentado reemplazar esta consulta con una que no contiene inner join
s en absoluto y la carga fue bastante rápida. Entonces me pregunto, dado que solo estoy seleccionando una columna como resultado, ¿por qué DataTable.Load() toma tanto tiempo? ¿Es el SQLite
de ExecuteReader
que carga los resultados completos y no solo una columna?La carga del lector DataTable es muy lenta
Antes de usar la DataTable, el tiempo promedio de ejecución de cada reader.Read()
fue de 7 segundos.
Este es mi código:
_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();
Parece que su consulta es simplemente lenta. ¿Hay alguna manera diferente de acceder a sus tablas para que no tenga que hacer tantas combinaciones? – Tejs
Sabía que esto iba a doler ... Desafortunadamente tenemos que conectar las 2 tablas basadas en uno de los campos. Estas uniones son la única conexión entre ellas, dado el esquema DB actual. – iCantSeeSharp
¿Qué es '_database' y por qué tiene métodos como' Connect' y 'Disconnect'? No reinventar la rueda. También debe usar un 'statement-using' para su conexión para asegurarse de que se" cierra "tan pronto como sea posible. ¿Es este un entorno multihilo como ASP.NET? –