• Jueves 28 de Marzo de 2024, 09:43

Autor Tema:  problema consulta grandes tablas  (Leído 1922 veces)

l3sanca

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
problema consulta grandes tablas
« en: Martes 27 de Octubre de 2009, 20:39 »
0
Resulta que me encuentro trabajando unas serie de consulticas en una base de datos con tabls de 500000registros, 400000 registros y necesito hacer una consulta que me las relacione pero el computador se me muere pensando.
mire la consulta es la siguiente en MYSQL :

SELECT fecha2, fechasolicitud, NumeroCuenta2, NombreOficina2, NombrePop2,Nuip,ValorTotal2 FROM dniproduccion JOIN bancopopulardos ON dniproduccion. Nuip=bancopopulardos. Identificacion ;

A ver les cuento son 2 tablas dniproduccion y bancopopulardos , necesito sacar los registros donde las columnas Identiciacion(popular2 es la tabla) y Nuip( dniproduccion es la tabla) coincidan y listo.

en cada columna Identificacion y Nuip tengo un indice asociado a ellas.
asi las definiciones de las tablas son:

CREATE TABLE `bancopopulardos` (
`fecha2` varchar(15) not NULL,
`NumeroCuenta2` bigint(20) not NULL,
`Oficina` smallint(6) not NULL,
`NombreOficina2` varchar(40) not NULL,
`CHEQCANJE` bigint(20) not NULL,
`CHQBPOPULAR` bigint(20) not NULL,
`Efectivo` bigint(20) not NULL,
`ValorTotal2` bigint(20) not NULL,
`NumDocumento` bigint(20) not NULL,
`Jornada` smallint(6) not NULL,
`NombrePop2` varchar(40) not NULL,
`Identificacion` bigint(20) not NULL,
`itemfinal` varchar(2) not NULL,
KEY `indicepopular2` (`Identificacion`))

CREATE TABLE `dniproduccion` (
`numpreparacion` bigint(20) not NULL,
`fechasolicitud` varchar(20) not NULL,
`Nuip` varchar(20) not NULL,
`IdClasExp` bigint(20) not NULL,
`CodRectificacion` varchar(5) not NULL,
`item` varchar(10) not NULL,
`CodOficina` varchar(10) not NULL,
`Nombre1` varchar(30) not NULL,
`Nombre2` varchar(30) not NULL,
`Apellido1` varchar(30) not NULL,
`Particula` varchar(30) not NULL,
`Apellido2` varchar(30) not NULL,
`Sexo` varchar(5) not NULL,
KEY `indiceproduccion` (`Nuip`))

Por ejemplo tengo conusltas de este tipo

SELECT SUM(ValorTotal2)AS Suma2 FROM dniproduccion INNER JOIN bancopopulardos ON dniproduccion. Nuip = bancopopulardos. Identificacion;

donde gasta casi 15 minutos el computador.

por ejemplo se me murere en un tipo de consutla asi:
SELECT SUM(SELECT SUM(ValorTotalp) AS Sumap FROM bancopopularpin INNER JOIN dniproduccion ON bancopopularpin. Identificacion = dniproduccion. Nuip)+(SELECT SUM(ValorTotal1) AS Suma1 FROM bancopopularuno INNER JOIN dniproduccion ON bancopopularuno. NoIdentificacion = dniproduccion. Nuip)+(SELECT SUM(ValorTotal2)AS Suma2 FROM dniproduccion INNER JOIN bancopopulardos ON dniproduccion. Nuip = bancopopulardos. Identificacion)+(SELECT SUM(ValorTotala) AS Sumaag FROM dniproduccion INNER JOIN bancoagrario ON dniproduccion. Nuip = bancoagrario. Nocedula)) AS SumaTotal ;

no se si exiista un amejor forma para esta consutla donde lo que busco es sumar datos de 4 diferentes tablas que cumplen unas compaaraciones entre columnas.

porr otro lado el EXPLAIN me muestra lo siguiente repecto a los indices en tablas dniproduccion y bancoagrario:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE dniproduccion ALL indiceproduccion,Nuip 223501
1 SIMPLE bancoagrario ref indiceagrario indiceagrario 8 bancocedulacion.dniproduccion.NUip 1


otra me muetsra lo siguiente dniproduccion y bancopopulardos:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE dniproduccion index indiceproduccion,Nuip indiceproduccion 8 223501 Using index
1 SIMPLE bancopopulardos ref indicepopular2 indicepopular2 8 bancocedulacion.dniproduccion.NUip 1

jhoelsalinas

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: problema consulta grandes tablas
« Respuesta #1 en: Sábado 20 de Febrero de 2010, 01:19 »
0
PS SOLO ERA COSA DE CREA UNA SUBCONSULTA  UNIDAS CON TUS CUATRO TABLAS Y LE DABAS UN SUM(VALORTOTAL)

ESTA FACIL PERO HORITA NU TENGO TIEMPO ,PERO SE ASE CON SUBCONSULTA

mau

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: cr
    • Ver Perfil
    • http://abcdioses.noneto.com
Re: problema consulta grandes tablas
« Respuesta #2 en: Miércoles 10 de Marzo de 2010, 15:59 »
0
Mira, tienes varios problemas de diseño en la tabla y en la consulta.
Lo primero y muy importante, las tablas deben estar correctamente indexadas para poder hacer las búsquedas eficientes sin peder tiempos al momento de insertar datos en las tablas. Esto es material de estudio aqui solo te trataré de explicar a grandes razgos lo que veo y que te ayudará visiblemente.

PRIMERO
SELECT SUM(ValorTotal2)AS Suma2 FROM dniproduccion INNER JOIN bancopopulardos ON dniproduccion. Nuip = bancopopulardos. Identificacion;

Para mi esto sería correcto si los campos dniproduccion. Nuip y bancopopulardos. Identificacion fuesen del mismo tipo.
Pero no lo son
`Identificacion` bigint(20) not NULL,
`Nuip` varchar(20) not NULL,

SEGUNDO
Estos campos que utilizas para hacer el JOIN y consecuentemente la búsqueda deben estar indexados. (CREA UN ÍNDICE PARA ESTOS CAMPOS)
ALTER TABLE dniproduccion ADD INDEX idx_autor(Nuip);
Este es el ejemplo para una de las tablas, repito, es muy aconsejable que los campos que vas a utilizar para el JOIN tengan el mismo tipo de datos y que estén indexados, los índices pueden ser únicos, es decir, funcionarían como el campo KEY en este caso la sintaxis que te expliqué no utiliza esa opcion.


Y creo que con esto tienes para mejorar mucho tus consultas y meterte la semillita de seguir investigando.

Saludos cordiales
Mau
Mau
Programador en VB, SQL, Sybase
Web-Master  de ABCDioses
http]

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: problema consulta grandes tablas
« Respuesta #3 en: Miércoles 10 de Marzo de 2010, 19:07 »
0
mau, que no ves qu ese usuario no se ha parado aqui en cinco meses?  :blink:

hay quy fijarse antesde revivir hilos viejos

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================