Quiero leer todo el contenido de una tabla en la memoria lo más rápido posible. Estoy utilizando la base de datos Nexus, pero podría haber algunas técnicas que podría utilizar que se aplican a todos los tipos de bases de datos en Delphi.Lectura rápida de la tabla de la base de datos de Nexus
La tabla que estoy viendo tiene 60,000 registros con 20 columnas. Entonces no es un gran conjunto de datos.
Desde mi perfilado, he encontrado lo siguiente hasta el momento:
acceso a las tablas directamente utilizando TnxTable no más rápido es o más lento que el uso de una consulta SQL y 'SELECT * FROM TableName'
El simple acto de recorrer las filas, sin leer ni copiar ningún dato, toma la mayor parte del tiempo.
El rendimiento que estoy recibiendo es
- bucle a través de todos los registros de toma 3,5 segundos
- bucle a través de todos los registros, la lectura de los valores y su almacenamiento, toma 3.7 segundos (es decir, sólo 0,2 segundos más)
Una muestra de mi código
var query:TnxQuery;
begin
query.SQL.Text:='SELECT * FROM TableName';
query.Active:=True;
while not query.Eof do
query.Next;
Esto demora 3.5 segundos en una tabla de filas de 60,000.
¿Este rendimiento suena razonable? ¿Hay otros enfoques que pueda tomar que me permitan leer los datos más rápido?
Actualmente estoy leyendo datos de un servidor en la misma computadora, pero eventualmente esto puede ser de otro servidor en una LAN.
¿Toma eso solo 3.5 o tiene otras instrucciones en el circuito? Porque si estás leyendo datos probablemente lo estés haciendo con FieldByName, que es famoso por ser no tan rápido – zz1433
Eso solo toma 3.5s – awmross