![]() |
Ayuda para abrir tabla...
Buen dia amigos, estoy usando Sql 2000,ado y delphi 7, tengo que hacer una consulta del padron, la cual desde que intento abrirla tarda mucho tiempo, son como 5.5 millones de registro, me dice que el tiempo expiro y aveces da otro error, que no lo tengo a mano ahora, pero cualquier persona que ha pasado por esto fovor de darme una mano.
Nota: desde el mismo sql si puedo abrir la tabla y realizar query, pero desde el delphi no que raro. |
Hola, quizá si pusieras el código que usas para abrir la tabla, facilitaria las cosas.
Así a primera vista, lo único que se me ocurre preguntarte es: ¿realizas algún filtro al abrir la tabla?, es decir, ¿escoges varios campos y usas where e índices o hay un : SELECT * FROM ...? Saludos |
En una tabla con ese número de registros yo pondría como condición indispensable un Filtro y para curarme en salud un TOP.
|
gracias por responder depronto, aqui está una muestra del código,disculpen por lo de la etiqueta es que no se como ponerla.
select * from vw_padron where apellido1 like '%garcia%' and apellido2 like '%rodriguez%' luego esto tarda mucho y luego dice que el tiempo expiro, luego lo intente abriendo la tabla directamente sin filtro y me dijo lo mismo select * from padron esto es un ejemplo por que aqui no tengo el delphi. Nota: Esta tabla tiene como cuarenta columnas eso tiene que ver, pero lo cierto es que me permite conectarme a la db, y cuando intento hasta desde un adotable no me abre me dice el mismo error. |
Revisa cómo poner TAG's en los mensajes para código, SQL,...
|
Está claro el problema.
Primero usas el * para recuperar las 40 columnas, deberías intentar filtrar las columnas necesarias. La condición que has puesto es un like, mejor dicho, dos likes, lo cual lo relentiza muchísimo. Cita:
Ahora se me ocurre algo, pero no se si será una tontería: prueba algo así:
Se trata de juntar los dos likes en uno, sólo tendrías un campo donde filtrar. Quizá pueda ser más rápido, pero recuerda en reducir el número de campos a recuperar. Eso es crucial. Saludos |
El problema es que la tabla es muy grande (en número de registros y en columnas), los campos por los que estás filtrando, posiblemente no son campos clave, tal vez no tengan índices, el operador LIKE es muy lento y además no estás haciendo ningun TOP.
Esa consulta tiene pinta de tardar mucho. Dos opciones: (1) O cambias la consulta para que tarde menos. (2) O Cambias el TimeOut de la conexion/Query ADO y te vas a tomar un café mientras salen los resultados. |
Podrías crear un índice por apellido1 y apellido2 si no los tienen. Esto de todas maneras no te valdrá de nada si usas LIKE '%garcia%', deberías usar sólo el % final, LIKE 'garcia%'. Creo que en este caso el resultado sería el mismo, y acelerarías mucho la consulta, eso sí, los índices tendrías que tenerlos igualmente.
|
gracias amigos por contestar neftali lo que dices es cierto esa es mi situacion, no entienedo eso de los top, favor de explicarmelo.
|
Un TOP sirve para realizar una consulta, pero obtener sólo los n primeros registros.
Depende de lo que necesites el tiempo será muy pequeño; El problema es que el TOP te da como máximo los 100 registros y no más. Ahora se me está ocurriendo que podría hacer un TOP para obtener 100. Consulta: Supongamos que obtienes: campo1 Campo2 Campo3 1 aaaaa 1234 2 bbbbb 9999 ... 100 ccccc 878787 Para obtener los siguientes podrías hacer (fijándote en el último obtenido):
Obtendrías los 100 siguientes... 101 aaaaa 1234 102 bbbbb 9999 ... 200 ccccc 878787 Para los siguientes:
Y así sucesivamente. Lo importante es que tengas un campo Clave por el que puedas ordenar. En el ejemplo he usado 1..100, 101..200,... pero serviría cualquier campo clave. |
gracias amigo ya lo tengo.
|
La franja horaria es GMT +2. Ahora son las 09:41:45. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi