FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
MySQL LENTO al hacer INSERT INTO sucesivamente
Hola a todos:
Les cuento a ver si a alguien le pasó. Trabajo con Delphi 5 y Zeos. Con MySQL todo bien, pero a la hora de tener que hacer varios INSERT INTO (dentro de un ciclo), se pone demasiado lento. Para los que han realizado un sistema comercial integrado con la contabilidad de la empresa, cada vez que se registra una factura hay que hacer un asiento contable por cada producto que integra la factura, dado que cada producto puede tener una imputación contable distinta. Supongamos una factura de 20 productos, me demora 9 segundos viendo el TXT del ZSQLMonitor. Ni quiero pensar implementado en red lo que va a demorar. Desde ya muchas gracias. |
#2
|
||||
|
||||
Nada tiene que ver la lentitud en tu caso con el motor. No das muestra de código, lo cual ayudaría mucho. Yo hice algo similar y como lo ataqué fue creando una clase TAsientoFactura a la que le paso el ID de la factura que quiero contabilizar y hago ahi toda la lógica.
Si pones el trozo de código que contiene el ciclo te podremos ayudar un poco màs.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#3
|
|||
|
|||
Va el código:
Por cada producto este código se ejecuta tres veces, una por cada renglón del asiento. Si la factura tiene 20 producto, el código se ejecuta unas 60 veces MD.ZAsientos.SQL.Clear; MD.ZAsientos.SQL.Text:='INSERT INTO asientos (fecha,cuenta,debe,haber,saldo,comentario,numero,comp,numcom,codprov)'+ 'VALUES (:fecha,:cuenta,:debe,:haber,:saldo,:comentario,:numero,:comp,:numcom,:codprov)'; MD.ZAsientos.ParamByName('fecha').Value:=StrtoDate(fecha.text); MD.ZAsientos.ParamByName('cuenta').Value:=MD.DetalleImputa.Value; MD.ZAsientos.ParamByName('Debe').Value:=MD.DetalleNetograv.Value; MD.ZAsientos.ParamByName('comentario').Value:=comentario; MD.ZAsientos.ParamByName('Numero').value:=nasiento; MD.zAsientos.ParamByName('Comp').value:=MD.DetalleTipo.Value; MD.zAsientos.ParamByName('Numcom').Value:=MD.DetalleNumcom.Value; MD.zAsientos.ParamByName('Codprov').Value:=MD.DetalleCod_prov.Value; MD.ZAsientos.ExecSQL; Desde ya muchas gracias |
#4
|
||||
|
||||
Hace poco tuve que hacer un programa que básicamente hacia un montón de Insert en una tabla de MySql y el proceso tardaba muchísimo (te podías ir a tomar un café ), hasta que descubrí que MySql permite la inserción múltiple, es decir, insertar varios registros de una vez.
Por ejemplo (ayuda de MySQL):
Podrías probar a construir tu mismo la consulta e insertar todos los productos de la factura en una sola sentencia. |
#5
|
||||
|
||||
Y no tendrá que ver con las transacciones?
Yo trabajo con Firebird y depende de si utilizo Commit o CommitRetaining, la cosa cambia mucho.
También puede tener que ver con los triggers que ejecute al insertar en esa tabla. Última edición por duilioisola fecha: 19-11-2008 a las 14:21:25. |
#6
|
|||
|
|||
Hola, soy nuevo en el foro y nuevo con Delphi. Pero laburo con MySQL desde hace años y te aseguro que hacer varias insersiones es muchísimo más lento que hacer una inserción enorme que haga todo.
Podés hacer una consulta del tipo INSERT INTO.... ; INSERT INTO...;INSERT INTO.... ; INSERT INTO...; ... y así. La idea es que mover el motor de MySQL cuesta un poco, y si vos hacés todas las inserciones por separado lo estás moviendo cada vez, en cambio, si le dás todas las inserciones para hacer él se encarga de optimizar las mismas. Cuanto más puedas delegar al motor mejor, está muy bien programado y nada de lo que vos programes va a ser más rápido. Y fijate de hacer transacciones, porque si grabás la factura y no los asientos vas a tener problemas. Saludos, matías.- |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
MySql y Delphi Lento | nasedo | MySQL | 6 | 04-08-2007 05:35:06 |
Prepare lento en Firebird.. y en MySQL?? | xander | MySQL | 11 | 01-11-2006 03:02:36 |
Un Insert muy lento......... | sitrico | Conexión con bases de datos | 9 | 30-05-2005 15:52:21 |
Mysql lento en Win Me y rapido en win 98 | miguelb | Windows | 0 | 03-02-2005 21:39:00 |
Mysql lento en Win Me y rapido en win 98 | miguelb | MySQL | 0 | 30-12-2004 02:22:16 |
|