Gran volumen Datos SELECT - ADO.NET

09/11/2005 - 14:31 por Maribel Quirós | Informe spam
Buenas Tardes,

Tengo un problema con el acceso a datos y posterior tratamiento en una
aplicacion de escritorio realizada con .net.

¿ 100.000 registros son muchos para tratarlos en un DATATABLE. ?

es que he probrado de realizar la consulta con DataReader (modo conectado) y
con el DataAdapter (para rellenar el DataTable en modo desconectado) y en los
2 tarda muchisimo.

En teoria, el DataReader trabaja en la Base de Datos NO ??? como es que
tarda tanto?? es como si me los exportara de golpe ...¿PUEDE SER?

La Base de Datos es INFORMIX y se encuentra en un servidor. Actualmente
accedo a los datos a través de ODBC.

Yo trabajo con la version del Visual Studio 2002.

NO SE QUE MÁS PUEDO DETALLAR. ¿Alguien me podría ayudar?
¿Cual es la mejor manera de tratar un gran volumen de datos?
¿Con la version de ADO.NET 2.0 esto mejoraria?

Gracias.
Maribel Quirós Carrero

Preguntas similare

Leer las respuestas

#1 Jon Herrero
09/11/2005 - 15:47 | Informe spam
Hola Maribel

¿Es una consulta SELECT o una tabla? si es un select prueba a ver si esta
entrando por los indices o no viendo el sqexplain.out . Yo tengo una
aplicación que realiza una consulta sobre una tabla de 300.000 registros y
entra bien (uso un datareader y ODBCcommand y odbcconnection)

Un saludo

Jon Herrero

"Maribel Quirós" escribió en el
mensaje news:
Buenas Tardes,

Tengo un problema con el acceso a datos y posterior tratamiento en una
aplicacion de escritorio realizada con .net.

¿ 100.000 registros son muchos para tratarlos en un DATATABLE. ?

es que he probrado de realizar la consulta con DataReader (modo conectado)
y
con el DataAdapter (para rellenar el DataTable en modo desconectado) y en
los
2 tarda muchisimo.

En teoria, el DataReader trabaja en la Base de Datos NO ??? como es que
tarda tanto?? es como si me los exportara de golpe ...¿PUEDE SER?

La Base de Datos es INFORMIX y se encuentra en un servidor. Actualmente
accedo a los datos a través de ODBC.

Yo trabajo con la version del Visual Studio 2002.

NO SE QUE MÁS PUEDO DETALLAR. ¿Alguien me podría ayudar?
¿Cual es la mejor manera de tratar un gran volumen de datos?
¿Con la version de ADO.NET 2.0 esto mejoraria?

Gracias.
Maribel Quirós Carrero
Respuesta Responder a este mensaje
#2 Maribel Quirós
09/11/2005 - 17:11 | Informe spam
Hola Jon,

Gracias por constestar,

Es una select (bastante bestia) que realizo a una base de datos informix.
Pero yo solo puedo consultarla. (no tengo derechos para nada más)

¿Como se mira el sqexplain.out ? ?

Gracias. Maribel Quirós Carrero

"Jon Herrero" escribió:

Hola Maribel

¿Es una consulta SELECT o una tabla? si es un select prueba a ver si esta
entrando por los indices o no viendo el sqexplain.out . Yo tengo una
aplicación que realiza una consulta sobre una tabla de 300.000 registros y
entra bien (uso un datareader y ODBCcommand y odbcconnection)

Un saludo

Jon Herrero

"Maribel Quirós" escribió en el
mensaje news:
> Buenas Tardes,
>
> Tengo un problema con el acceso a datos y posterior tratamiento en una
> aplicacion de escritorio realizada con .net.
>
> ¿ 100.000 registros son muchos para tratarlos en un DATATABLE. ?
>
> es que he probrado de realizar la consulta con DataReader (modo conectado)
> y
> con el DataAdapter (para rellenar el DataTable en modo desconectado) y en
> los
> 2 tarda muchisimo.
>
> En teoria, el DataReader trabaja en la Base de Datos NO ??? como es que
> tarda tanto?? es como si me los exportara de golpe ...¿PUEDE SER?
>
> La Base de Datos es INFORMIX y se encuentra en un servidor. Actualmente
> accedo a los datos a través de ODBC.
>
> Yo trabajo con la version del Visual Studio 2002.
>
> NO SE QUE MÁS PUEDO DETALLAR. ¿Alguien me podría ayudar?
> ¿Cual es la mejor manera de tratar un gran volumen de datos?
> ¿Con la version de ADO.NET 2.0 esto mejoraria?
>
> Gracias.
> Maribel Quirós Carrero



Respuesta Responder a este mensaje
#3 Jon Herrero
09/11/2005 - 18:09 | Informe spam
Hola Maribel

El sqexplain.out es el archivo de salida del plan de ejecución de una
consulta SQL. Hay te cuenta por que tabalas entra, cual es el filtro, cual
es el indice y el "trabajo" que le va a costar.

Para ello has de entrar al isql/dbaccess y ejecutar "set explain on". Aquí
lo que hace es abrir el archivo. Luego ejecutas tu select y obtienes los
datos del plan de ejecución. Por lo que cuentas el select esta haciendo un
SEQUENTIAL INDEX o un SEQUENTIAL SCAN, o entrando por la tabla equivocada y
eso te esta ralentizando.

Te dejo un ej. de un plan de consulta

Un saludo

Jon Herrero

EJEMPLO
-

QUERY:

select "E" ,sum(hm085) from falmhma
where hm999=1 and hm000=1 and hm010="101003605" and
hm140="07/2005"

union all

select "P",sum(dt130) from fprodtc,fprolof
where lo000=dt000 and lo010=dt010 and lo020=dt020
and dt000=1 and
(dt050>="01/7/2005" and dt050<="31/7/2005") and lo030="101003605"


Estimated Cost: 154
Estimated # of Rows Returned: 2

1) jon.falmhma: INDEX PATH

Filters: jon.falmhma.hm140 = '07/2005'

(1) Index Keys: hm999 hm010 hm000 hm020
Lower Index Filter: (jon.falmhma.hm999 = 1 AND (jon.falmhma.hm000 =
1 AN
D jon.falmhma.hm010 = '101003605' ) )

Union Query:


1) jon.fprodtc: INDEX PATH

(1) Index Keys: dt000 dt050 (desc) dt010
Lower Index Filter: (jon.fprodtc.dt000 = 1 AND jon.fprodtc.dt050 <=
'31/
7/2005' )
Upper Index Filter: jon.fprodtc.dt050 >= '01/7/2005'

2) jon.fprolof: INDEX PATH

Filters: jon.fprolof.lo030 = '101003605'

(1) Index Keys: lo000 lo010 lo020
Lower Index Filter: (jon.fprolof.lo020 = jon.fprodtc.dt020 AND
(jon.fpro
lof.lo010 = jon.fprodtc.dt010 AND jon.fprolof.lo000 = jon.fprodtc.dt000 ) )



"Maribel Quirós" escribió en el
mensaje news:
Hola Jon,

Gracias por constestar,

Es una select (bastante bestia) que realizo a una base de datos informix.
Pero yo solo puedo consultarla. (no tengo derechos para nada más)

¿Como se mira el sqexplain.out ? ?

Gracias. Maribel Quirós Carrero

"Jon Herrero" escribió:

Hola Maribel

¿Es una consulta SELECT o una tabla? si es un select prueba a ver si esta
entrando por los indices o no viendo el sqexplain.out . Yo tengo una
aplicación que realiza una consulta sobre una tabla de 300.000 registros
y
entra bien (uso un datareader y ODBCcommand y odbcconnection)

Un saludo

Jon Herrero

"Maribel Quirós" escribió en el
mensaje news:
> Buenas Tardes,
>
> Tengo un problema con el acceso a datos y posterior tratamiento en una
> aplicacion de escritorio realizada con .net.
>
> ¿ 100.000 registros son muchos para tratarlos en un DATATABLE. ?
>
> es que he probrado de realizar la consulta con DataReader (modo
> conectado)
> y
> con el DataAdapter (para rellenar el DataTable en modo desconectado) y
> en
> los
> 2 tarda muchisimo.
>
> En teoria, el DataReader trabaja en la Base de Datos NO ??? como es que
> tarda tanto?? es como si me los exportara de golpe ...¿PUEDE SER?
>
> La Base de Datos es INFORMIX y se encuentra en un servidor. Actualmente
> accedo a los datos a través de ODBC.
>
> Yo trabajo con la version del Visual Studio 2002.
>
> NO SE QUE MÁS PUEDO DETALLAR. ¿Alguien me podría ayudar?
> ¿Cual es la mejor manera de tratar un gran volumen de datos?
> ¿Con la version de ADO.NET 2.0 esto mejoraria?
>
> Gracias.
> Maribel Quirós Carrero



Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
09/11/2005 - 18:41 | Informe spam
No me queda claro algo, los 100000 registros los tienes en el datatable o es
la cantidad de registros que tiene la tabla en la BD? Si es lo primero lo
que deberias hacer es filtrar o paginar los registros para no cargar tanto
el datatable (ningun usuario va a estar recorriendo semejante cantidad de
registros).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#5 Maribel Quirós
10/11/2005 - 08:26 | Informe spam
Buenos Días,

Los 100.000 registros proceden de una select y los necesito para realizar
una serie de cálculos, realmente el usuario no verá estos registros sino el
resultado del cálculo (unos 2000 registros aproximadamente). No sé, pero la
paginación creo que sirve cuando lo muestras al usuario en un datagrid. Yo
realmente los necesito todos porque hay condiciones en este calculo en el
que necesito agruparlos...

Probaré de ejecutar la select por separado, pero aún no entiendo como el
datatable se vuelve tan lento a la que hay muchos registros. He leido en un
artículo que ADO.NET 2.0 soluciona este incoveniente, con lo que supongo que
ADO.net 1.X tiene ese problema.

¿Hay alguna manera de incorporar la tenconologia de ADO.net 2.0 en Visual
Studio 2002?, Se que está incorporado en el Visual Studio 2005. Quizás esa
sea la solución.


Gracias,
Maribel Quirós Carrero

"Eduardo A. Morcillo [MS MVP VB]" escribió:

No me queda claro algo, los 100000 registros los tienes en el datatable o es
la cantidad de registros que tiene la tabla en la BD? Si es lo primero lo
que deberias hacer es filtrar o paginar los registros para no cargar tanto
el datatable (ningun usuario va a estar recorriendo semejante cantidad de
registros).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida