Buenos dias para tod@s!
Espero puedan ayudarme con un problema que tengo con una tabla a la cual le estoy haciendo un SELECT ... UNION
y la verdad está tardando demasiado (considero)... Bueno voy al punto:
La tabla actualmente contiene en este momento un promedio de 50,000 registros de prueba... pero que en la "vida real" pueden ser unos 750,000 (quizás un poco más)
La estructura de la tabla es mas o menos así:
casilla N(5) correlativo N(3) grupo N(2) v01 C(5) v02 C(5) v03 C(5) v04 C(5) v06 C(5) v07 C(5) v08 C(5) ....... v24 C(5) vtotal N(2) combinado Tipo (Logico)
hablamos de mas de 30 campos pero solo menciono los 29 que participan:
Ahora bien, el select va mas o menos de la siguiente manera:
select casilla, correlativ, valor, grupo, vtotal FROM ;
(select casilla, correlativ,
v01 as valor, grupo, vtotal from mitabla WHERE (BETWEEN(casilla,1, 3000) AND correlativ > 0 AND grupo=0 AND vtotal<24 AND combinado = .f.) OR (BETWEEN(casilla, 1, 3000) AND correlativ > 0 AND grupo>0 AND BETWEEN(vtotal, 1, 23)) UNION ;
select casilla, correlativ,
v02 as valor, grupo, vtotal from mitabla
WHERE (BETWEEN(casilla,1, 3000) AND correlativ > 0 AND grupo=0 AND
vtotal<24 AND combinado = .f.) OR (BETWEEN(casilla, 1, 3000) AND
correlativ > 0 AND grupo>0 AND BETWEEN(vtotal, 1, 23)) UNION ;
select casilla, correlativ,
v03 as valor, grupo, vtotal from mitabla
WHERE (BETWEEN(casilla,1, 3000) AND correlativ > 0 AND grupo=0 AND
vtotal<24 AND combinado = .f.) OR (BETWEEN(casilla, 1, 3000) AND
correlativ > 0 AND grupo>0 AND BETWEEN(vtotal, 1, 23)) UNION ;
.....................
select casilla, correlativ,
v24 as valor, grupo, vtotal from mitabla
WHERE (BETWEEN(casilla,1, 3000) AND correlativ > 0 AND grupo=0 AND
vtotal<24 AND combinado = .f.) OR (BETWEEN(casilla, 1, 3000) AND
correlativ > 0 AND grupo>0 AND BETWEEN(vtotal, 1, 23)) AS ff WHERE !EMPTY(valor) into cursor ffa
pues con 50,000 registros este Select se tarda aproximadamente 30 segundos!
el cursor obtenido (con esta cantidad de registros en
mitabla) contiene alrededor de 400,000 registros.
la tabla la tenia con un indice en los campos casilla y correlativ.... y he probado modificandolo y lo dejé así:
indice = casilla+correlativ+grupo+vtotal
y pues la verdad no se agiliza en nada, no sé si habrá alguna forma de establecer o configurar un mejor índice que realemente le ayude a la consulta.
Consideran que hay posibilidades de poder mejorar este rendimiento? o será que sinceramente no puedo obtener nada mejor a menos que utilice un servidor de base de datos?
Espero puedan ayudarme,
Mi más sincera gratitud anticipadamente.