Velocidad al leer fichero plano y hacer insert
Publicado por Marta (49 intervenciones) el 22/01/2007 18:20:52
Tengo una aplicación que lo que hago es leer un fichero plano y meter cada linea del fichero en una tabla de mi base de datos Oracle.
Cuando el fichero a leer contiene muchas filas, puede llegar a tener 100.000, el proceso es muy lento...
Estoy probando con ficheros de unas 1000 filas y me tarda unos 7 minutos... yo creo que se puede hacer algo para que sea más rápido... alguna idea???
Voy leyendo fila a fila y se hace un commit por cada fila insertada:
Dim blnSalida As Boolean = False
Dim cmd As OracleCommand
Dim conexion As OracleConnection
Dim sql As String
conexion = New OracleConnection(AppSettings("cadenaConexion"))
conexion.Open()
cmd = New OracleCommand
cmd.Connection = conexion
sql = " insert into FICHERO_NAVIERA (ID_FICHERO_HISTORIAL, FECHACARGA, ESTADOCUPON, ANYOFACTURACION, " & _
" TRIMESTREFACTU, CODCOMPANYIA, NUMSERIEBILLETE, " & _
" NUMEMBARQUE, PUNTOVENTABILLETE, TIPOSUBVENCION, FECHAEMISION, TRAYECTO, " & _
" COMPANYIAUTIL, FECHAEMBARQUE, INDICADOR, CODACOMODACION, TARIFAINICIAL, " & _
" PORCENBONIRESI, PORCENBONIFAMI, PORCENBONIMILI, IMPORTEFINAL, TIPOACREDITACION, " & _
" NUMDOCUMENTO, NOMBREAPELLIDOS, CODMUNICIPIO, SELECCIONMUESTRA, OBSERVACIONESDGMM, TARJFAMNUM, ERRORVERADICIONALES) values " & _
"( " & IIf(item.id_fichero_historial.id_historial_naviera = 0, 0, item.id_fichero_historial.id_historial_naviera) & ", " & _
" " & IIf(item.FechaCarga = Nothing, "null", "'" & item.FechaCarga & "'") & ", " & _
" " & item.estadoCupon.cod_cupon & ", " & _
" " & IIf(item.AnyoFacturacion = "", "null", "'" & item.AnyoFacturacion & "'") & ", " & _
" " & IIf(item.TrimestreFactu = "", "null", "'" & item.TrimestreFactu & "'") & ", " & _
" " & IIf(item.CodCompanyia.codigo = "", "null", "'" & item.CodCompanyia.codigo & "'") & ", " & _
" " & IIf(item.NumSerieBillete = "", "null", "'" & item.NumSerieBillete & "'") & ", " & _
" " & IIf(item.NumEmbarque = "", "null", "'" & item.NumEmbarque & "'") & ", " & _
" " & IIf(item.PuntoVentaBillete = "", "null", "'" & item.PuntoVentaBillete & "'") & ", " & _
" " & IIf(item.TipoSubvencion = "", "null", "'" & item.TipoSubvencion & "'") & ", " & _
" " & IIf(item.FechaEmision = Nothing, "null", "'" & item.FechaEmision.ToShortDateString & "'") & ", " & _
" " & IIf(item.Trayecto = "", "null", "'" & item.Trayecto & "'") & ", " & _
" " & IIf(item.CompanyiaUtil.codigo = "", "null", "'" & item.CompanyiaUtil.codigo & "'") & ", " & _
" " & IIf(item.FechaEmbarque = Nothing, "null", "to_date('" & (item.FechaEmbarque) & "','dd/mm/yyyy hh24:mi ss')") & ", " & _
" " & IIf(item.Indicador = "", "null", "'" & item.Indicador & "'") & ", " & _
" " & IIf(item.CodAcomodacion = "", "null", "'" & item.CodAcomodacion & "'") & ", " & _
" " & IIf(item.TarifaInicial = 0, 0, "'" & item.TarifaInicial & "'") & ", " & _
" " & IIf(item.PorcenBoniResi = 0, 0, "'" & item.PorcenBoniResi & "'") & ", " & _
" " & IIf(item.PorcenBoniFami = 0, 0, "'" & item.PorcenBoniFami & "'") & ", " & _
" " & IIf(item.PorcenBoniMili = 0, 0, "'" & item.PorcenBoniMili & "'") & ", " & _
" " & IIf(item.ImporteFinal = 0, 0, "'" & item.ImporteFinal & "'") & ", " & _
" " & IIf(item.TipoAcreditacion = "", "null", "'" & item.TipoAcreditacion & "'") & ", " & _
" " & IIf(item.NumDocumento = "", "null", "'" & item.NumDocumento & "'") & ", " & _
" " & IIf(item.NombreApellidos = "", "null", "'" & item.NombreApellidos & "'") & ", " & _
" " & IIf(item.CodMunicipio = "", "null", "'" & item.CodMunicipio & "'") & ", " & _
" " & IIf(item.seleccionMuestra = "", "null", "'" & item.seleccionMuestra & "'") & ", " & _
" " & IIf(item.observacionesDGMM = "", "null", "'" & item.observacionesDGMM & "'") & ", " & _
" " & IIf(item.TarjFamNum = "", "null", "'" & item.TarjFamNum & "'") & ", " & _
" " & IIf(item.ErrorVerAdicionales = "", "null", "'" & item.ErrorVerAdicionales & "'") & " )"
cmd.CommandText = sql
cmd.ExecuteNonQuery()
cmd.Dispose()
conexion.Close()
Cuando el fichero a leer contiene muchas filas, puede llegar a tener 100.000, el proceso es muy lento...
Estoy probando con ficheros de unas 1000 filas y me tarda unos 7 minutos... yo creo que se puede hacer algo para que sea más rápido... alguna idea???
Voy leyendo fila a fila y se hace un commit por cada fila insertada:
Dim blnSalida As Boolean = False
Dim cmd As OracleCommand
Dim conexion As OracleConnection
Dim sql As String
conexion = New OracleConnection(AppSettings("cadenaConexion"))
conexion.Open()
cmd = New OracleCommand
cmd.Connection = conexion
sql = " insert into FICHERO_NAVIERA (ID_FICHERO_HISTORIAL, FECHACARGA, ESTADOCUPON, ANYOFACTURACION, " & _
" TRIMESTREFACTU, CODCOMPANYIA, NUMSERIEBILLETE, " & _
" NUMEMBARQUE, PUNTOVENTABILLETE, TIPOSUBVENCION, FECHAEMISION, TRAYECTO, " & _
" COMPANYIAUTIL, FECHAEMBARQUE, INDICADOR, CODACOMODACION, TARIFAINICIAL, " & _
" PORCENBONIRESI, PORCENBONIFAMI, PORCENBONIMILI, IMPORTEFINAL, TIPOACREDITACION, " & _
" NUMDOCUMENTO, NOMBREAPELLIDOS, CODMUNICIPIO, SELECCIONMUESTRA, OBSERVACIONESDGMM, TARJFAMNUM, ERRORVERADICIONALES) values " & _
"( " & IIf(item.id_fichero_historial.id_historial_naviera = 0, 0, item.id_fichero_historial.id_historial_naviera) & ", " & _
" " & IIf(item.FechaCarga = Nothing, "null", "'" & item.FechaCarga & "'") & ", " & _
" " & item.estadoCupon.cod_cupon & ", " & _
" " & IIf(item.AnyoFacturacion = "", "null", "'" & item.AnyoFacturacion & "'") & ", " & _
" " & IIf(item.TrimestreFactu = "", "null", "'" & item.TrimestreFactu & "'") & ", " & _
" " & IIf(item.CodCompanyia.codigo = "", "null", "'" & item.CodCompanyia.codigo & "'") & ", " & _
" " & IIf(item.NumSerieBillete = "", "null", "'" & item.NumSerieBillete & "'") & ", " & _
" " & IIf(item.NumEmbarque = "", "null", "'" & item.NumEmbarque & "'") & ", " & _
" " & IIf(item.PuntoVentaBillete = "", "null", "'" & item.PuntoVentaBillete & "'") & ", " & _
" " & IIf(item.TipoSubvencion = "", "null", "'" & item.TipoSubvencion & "'") & ", " & _
" " & IIf(item.FechaEmision = Nothing, "null", "'" & item.FechaEmision.ToShortDateString & "'") & ", " & _
" " & IIf(item.Trayecto = "", "null", "'" & item.Trayecto & "'") & ", " & _
" " & IIf(item.CompanyiaUtil.codigo = "", "null", "'" & item.CompanyiaUtil.codigo & "'") & ", " & _
" " & IIf(item.FechaEmbarque = Nothing, "null", "to_date('" & (item.FechaEmbarque) & "','dd/mm/yyyy hh24:mi ss')") & ", " & _
" " & IIf(item.Indicador = "", "null", "'" & item.Indicador & "'") & ", " & _
" " & IIf(item.CodAcomodacion = "", "null", "'" & item.CodAcomodacion & "'") & ", " & _
" " & IIf(item.TarifaInicial = 0, 0, "'" & item.TarifaInicial & "'") & ", " & _
" " & IIf(item.PorcenBoniResi = 0, 0, "'" & item.PorcenBoniResi & "'") & ", " & _
" " & IIf(item.PorcenBoniFami = 0, 0, "'" & item.PorcenBoniFami & "'") & ", " & _
" " & IIf(item.PorcenBoniMili = 0, 0, "'" & item.PorcenBoniMili & "'") & ", " & _
" " & IIf(item.ImporteFinal = 0, 0, "'" & item.ImporteFinal & "'") & ", " & _
" " & IIf(item.TipoAcreditacion = "", "null", "'" & item.TipoAcreditacion & "'") & ", " & _
" " & IIf(item.NumDocumento = "", "null", "'" & item.NumDocumento & "'") & ", " & _
" " & IIf(item.NombreApellidos = "", "null", "'" & item.NombreApellidos & "'") & ", " & _
" " & IIf(item.CodMunicipio = "", "null", "'" & item.CodMunicipio & "'") & ", " & _
" " & IIf(item.seleccionMuestra = "", "null", "'" & item.seleccionMuestra & "'") & ", " & _
" " & IIf(item.observacionesDGMM = "", "null", "'" & item.observacionesDGMM & "'") & ", " & _
" " & IIf(item.TarjFamNum = "", "null", "'" & item.TarjFamNum & "'") & ", " & _
" " & IIf(item.ErrorVerAdicionales = "", "null", "'" & item.ErrorVerAdicionales & "'") & " )"
cmd.CommandText = sql
cmd.ExecuteNonQuery()
cmd.Dispose()
conexion.Close()
Valora esta pregunta
0