• Publicidad

Consulta sobre mysql

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Consulta sobre mysql

Notapor preiddy » 2008-09-10 11:11 @508

Tengo un problema con lo que no sé si es el mysql o la estructura de la BD.

Mi BD tiene dos tablas A y B. A es la principal (38 campos) y tiene más de 300 mil registros, la B se construye con el id, un nombre y un tipo (que se puede repetir x cantidad) y unos 900 mil registros.

Cuando hago la siguiente consulta
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
SELECT * FROM A, B WHERE A.id=B.id AND fecha >=2002 AND fecha<2007 AND tipo='1' OR tipo='2'
GROUP BY id
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


después de varias horas de "perfoming query..." me entra la desesperación y cancelo el proceso.

El mysql trabaja con el my.cnf optimizado para servidores con 1GB ó 2GB de RAM. Mi computadora tiene 5GB de RAM.

Los campos id, fecha y tipo están indexados.

¿Alguna idea o sugerencia?
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Publicidad

Notapor explorer » 2008-09-10 11:46 @532

¿Los campos fecha y tipo que muestras ahí son de la tabla B?

¿Qué otros valores puede almacenar tipo?

Primero probaría con
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
SELECT
    *
FROM
    A, B
WHERE
        B.tipo = '1' OR B.tipo = '2'
    AND
        fecha >= 2002 AND fecha < 2007
    AND
        A.id = B.id
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
a ver cuánto tarda. Fíjate que he cambiado de orden de las condiciones.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2008-09-11 09:36 @442

Igual, no cambia nada.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2008-09-11 10:08 @463

Bueno... como no cuesta casi nada... prueba a hacerlo con Perl. Es decir: haz una consulta para sacar todos los registros de A. Luego, otra consulta a B con las condiciones de fecha y tipo. Las dos consultas, almacenadas en hash y hash de array (dices que se pueden repetir, por lo que hay que almacenarlas de esa forma).

Para sacar la correspondencia, recorrer las claves de A y sacar los arrays correspondientes de la misma clave en el hash de B.

Otra opción... este tipo de consultas las hacía yo el año pasado con una Oracle y algunas tardaban mucho, pero la solución a veces era jugar con las opciones JOIN LEFT o JOIN RIGHT o IN, que creo que sí que está en mysql. El último recurso era lo que te dije: hacer varias consultas y luego unirlas con Perl.

Yo no soy un experto en SQL, así que no puedo ayudarte en cómo serían las otras variantes que tendrías que probar. A ver si alguien más te puede ayudar...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2008-09-11 10:27 @477

Gracias explorer por tu pronta respuesta. La opción de Perl la barajé en su momento, pero otros compañeros que usan la BD solo saben unas cuantas instrucciones de SQL (al igual que yo) y prefieren querys que luego puedan copiar y pegar para sacar los listados que se necesitan.

He probado con el join y es igual. He probado por partes y los tiempos de respuestas no son malos, pero cuando agrego el group by ya pasa lo que pasa, jajajaja.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2008-09-11 10:31 @480

Pues si el problema es el GROUP BY, haz que lo haga Perl.

En este tipo de base de datos grandes es donde se ven los límites de nuestras máquinas, de los motores de búsqueda, y de nuestra habilidad como programadores de SQL: según cómo lo escribas puedes tardar 3 minutos o 3 horas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados