PDA

Ver la Versión Completa : Problema ZEOS


WaRRanT
23-03-2004, 19:54:55
Boa tarde pessoal,

Não tem no Zeos algum recurso como o "FETCHROWS" ou "PACKETSIZE"???

Dei um "Select * from tabela", em uma tabla com cerca de 1.700.000 registros e demorou un tempo absurdo, além de travar a máquina...

Gracias,

WaRRant

guillotmarc
23-03-2004, 20:24:22
Hola.

No conozco las Zeos, pero me parece muy normal que tengas esos problemas con una cantidad tan grande de datos a copiar en memoria local. Por si no encuentras esas propiedades, siempre puedes recoger los datos en paquetes más pequeños, mediante consultas del tipo :

(primera consulta)

select TOP 1000 from Tabela

(consultas siguientes)

select TOP 1000 from Table where Codigo > :CodigoAnterior

Saludos.

roman
23-03-2004, 20:28:47
Realmente desconozco la respuesta exacta a tu pregunta. Sin embargo te comento que, como regla general las consultas SQL deben ser mucho más selectivas. Nadie quiere ni necesita ver un millón de registros. Las consultas deben planearse de tal suerte que regresen idealmente no más de 200 o 300 registros, ya en un caso extremo 1000 0 2000 registros. Más de eso va más allá de lo que un humano está dispuesto a recorrer- incluso cuando así lo crean.

Ahora bien, a falta de otra solución podrías mientras tanto usar la instrucción LIMIT para paginar los resultados:



SELECT * FROM tabla LIMIT :start, 100


Comienzas con start = 0 y conforme el suario pida más registros incrementas start en 100.

De esta manera visualizas virtualmente todos los registros, de 100 en 100. El usuario no tiene que esperar una tiempo absurdo y cuando se canse (que será por ahí de las 10 páginas) podrá cerrar la ventana y se acabó.

// Saludos

roman
23-03-2004, 20:30:10
Se me adelantó Marc y ya ves, la técnica es similar excepto que en MySql usas LIMIT en lugar de TOP.

// Saludos

WaRRanT
23-03-2004, 20:39:23
Caro amigos guillotmarc e Roman,

Primeiramente, gracias pela atenção,

Eu sei que não é preciso ver milhoes de registros, então eu fiz minha consulta da seguinte maneira:

"Select M.* from movvales M Where M.empresa = :prEmpresa limit 0,20000"

OK?

Mas o problema é na hora de inserir datos...

Eu dou um "Query.insert" (so me serve deste modo), e como já tem os 20000 carregados na Query, nao é possível inserir mais nenhum registro... ele ate exibe na GRID, mas nao grava!

Como faço?

Gracias,

WaRRant

roman
23-03-2004, 20:49:15
Eu dou um "Query.insert" (so me serve deste modo), e como já tem os 20000 carregados na Query, nao é possível inserir mais nenhum registro... ele ate exibe na GRID, mas nao grava!


Acabo de probar y no me da problemas. ¿Tienes la propiedad RequestLive en true?

// Saludos

WaRRanT
24-03-2004, 13:59:59
Roman,

Gracias! Houve um equivoco de minha parte...

So mais uma duvida...

Eu gostaria de ordenar meus registros por ordem de "data" (campo fecha). Eu achei que bastava indexar o campo e ele ordenaria...

Mas acabei tendo que usar um "ORDER BY", veja abaixo:

"Select M.* from movvales M Where M.empresa = :prEmpresa ORDER BY data DESC limit 0,20000;"


Mas ficou bem mais lento...... lento..... :(

guillotmarc
24-03-2004, 14:36:40
Hola.

Tienes que tener las dos cosas. El índice creado, y un order by en la consulta. (El ORDER BY indica que queremos un resultado ordenado, y el índice proporciona al servidor una forma rápida de calcular el orden).

NOTA : En algunos servidores, si quieres hacer una ordenación descendiente, tienes que crear un índice descendiente. No sé si también es el caso de MySQL.

Saludos.

roman
24-03-2004, 16:15:42
De hecho no es necesario crear el índice para ordenar. La sentencia ORDER BY servirá para ordenar por cualquier campo o conjunto de campos. Sin embargo la existencia de índices hará que el ordenamiento sea mucho má rápido.

Por lo dicho antes, no es necesario un índice descendiente para ordenar en forma descendente.

// Saludos

WaRRanT
24-03-2004, 19:58:29
guillotmarc e ROman,

OK! ;)

Resolvido!


Mudando um pouco aqui o assunto, mas ainda com relação ao ZEOS...

Voces sabem como traduzir um "Key Violation" no ZEOS?

Gracias,

Abraços!

roman
24-03-2004, 20:10:39
Mudando um pouco aqui o assunto, mas ainda com relação ao ZEOS...

Lo siento, esta vez te toca "regaño" ;)

Esta sería ya la tercera vez que cambias de tema en el mismo hilo. El que esté relacionado con Zeos no afecta ya que "Zeos" es algo muy general. Abre un hilo nuevo.

// Saludos

¡Ah! Y por favor escoge un título más indicativo del problema.