elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  [AYUDA] Optimizar Consulta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Optimizar Consulta  (Leído 3,160 veces)
Rudy21

Desconectado Desconectado

Mensajes: 154


Rudy21 Web Design


Ver Perfil WWW
[AYUDA] Optimizar Consulta
« en: 26 Agosto 2013, 10:37 »

Buenas noches, tengo una consulta en MySQL que me está matando

les comento, anteriormente se corria el sistema en Visual Basic 2010 con una base de datos en ACCESS y funcionaba bien y rapido, el problema fue que ya no quisieron centralizado el sistema y se migro a un servidor online con MySQL

al hacer el cambio todo funciona perfectamente excepto esta consulta

select * from clientes where NoCliente not in (SELECT NoCliente from pagos where pagos.id In (select IdPago from Pagos_Detalle where Mes = 'Agosto' and año='2013')) order by Nombre ASC

Se tiene una tabla clientes una de pagos y otra de detalle de pagos


en clientes pues los clientes
en pagos se establece fecha y monto y a que cliente corresponde el pago
en pago_detalles se pone que meses se pagaron de servicios

esa consulta lo que hace es sacar los clientes DEUDORES, es decir los que no han pagado este mes

en MySQL, incluso corriendolo desde phpMyAdmin, o consola, (hice la prueba ya que pensé que era error del conector ODBC) esa consulta tarda

357.512 segundos (casi 6minutos!!!!) en access me lo hacía en segundos sin problemas

Alguna idea para optimizar la consulta y hacerla más rápida


De antemano Gracias.


En línea


1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [AYUDA] Optimizar Consulta
« Respuesta #1 en: 26 Agosto 2013, 17:51 »

Para mejorar la base de datos.

Coloca indexes, foreing keys (relationship).

Citar
where Mes = 'Agosto'
Deberías utilizar indices numéricos son más rápidos.

Crees que puedas mostrar la estructura exacta de tus tablas? ya sea con

Código
  1. SHOW CREATE TABLE nombre_tabla

o

Código
  1. EXPLAIN nombre_tabla


En línea

abc
Rudy21

Desconectado Desconectado

Mensajes: 154


Rudy21 Web Design


Ver Perfil WWW
Re: [AYUDA] Optimizar Consulta
« Respuesta #2 en: 27 Agosto 2013, 16:51 »

Clientes:
Código:
CREATE TABLE `clientes` (
  `NoCliente` varchar(50) COLLATE latin1_spanish_ci NOT NULL,
  `Nombre` varchar(100) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Email` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Telefono` varchar(15) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Mac` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Cp` varchar(10) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Calle` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Estado` varchar(100) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Ciudad` varchar(100) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Colonia` varchar(100) COLLATE latin1_spanish_ci DEFAULT NULL,
  `CodigoServicio` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `EquipoConectado` varchar(100) COLLATE latin1_spanish_ci DEFAULT NULL,
  `FechaAlta` datetime DEFAULT NULL,
  PRIMARY KEY (`NoCliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

Pagos
Código:
CREATE TABLE `pagos` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Fecha` date DEFAULT NULL,
  `NoCliente` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Usuario` varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Importe` decimal(19,2) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2014 DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

Pagos_Detalle
Código:
CREATE TABLE `Pagos_Detalle` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `IdPago` int(11) DEFAULT NULL,
  `Mes` varchar(25) COLLATE latin1_spanish_ci DEFAULT NULL,
  `año` varchar(5) COLLATE latin1_spanish_ci DEFAULT NULL,
  `Importe` decimal(19,2) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2397 DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci
En línea


Rudy21

Desconectado Desconectado

Mensajes: 154


Rudy21 Web Design


Ver Perfil WWW
Re: [AYUDA] Optimizar Consulta
« Respuesta #3 en: 27 Agosto 2013, 17:24 »

Al ejecutarlo en una maquina local la misma consulta con los mismos datos

y la misma estructura, la consulta se mostró

Showing rows 0 - 33 ( 34 total, Query took 0.0074 sec)

asi que estoy viendo que son problemas de mi servidor y no tanto de la consulta

voy a ver que es lo que está sucediendo

Muchas Gracias ;)
En línea


1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [AYUDA] Optimizar Consulta
« Respuesta #4 en: 27 Agosto 2013, 17:29 »

Hola.
Algo que pides además de la consulta es optimizar la base de datos.
Aquí algunas observaciones y sugerencias.

En la tabla clientes
Citar
`NoCliente` varchar(50) COLLATE latin1_spanish_ci NOT NULL,
Por qué es de tipo varchar y no int?
Por qué tiene un tamaño de 50?

Citar
`Cp` varchar(10)
Trata de ajustar más los tamaños de tus campos.
Un CP nunca tendrá más de 5 caracteres.

En la tabla Pagos_Detalle
Citar
`año` varchar(5)
No uses caracteres extendidos en base de datos (ni en programación) (letra ñ)

Como último pero no menos importante, trata de seguir una nomenclatura de variables.
En línea

abc
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [AYUDA] Optimizar Consulta
« Respuesta #5 en: 27 Agosto 2013, 17:34 »

Al ejecutarlo en una maquina local la misma consulta con los mismos datos

y la misma estructura, la consulta se mostró

Showing rows 0 - 33 ( 34 total, Query took 0.0074 sec)

asi que estoy viendo que son problemas de mi servidor y no tanto de la consulta

voy a ver que es lo que está sucediendo

Muchas Gracias ;)

Es lo que estaba por comentar, también ejecuté la consulta y no tuve problemas en cuanto a la sintaxis.

Qué versión de mysql tienes en el servidor local y en el servidor del proveedor?

Cuantos registros de información tienes en cada tabla? para hacer la consulta en el servidor local.
En línea

abc
Rudy21

Desconectado Desconectado

Mensajes: 154


Rudy21 Web Design


Ver Perfil WWW
Re: [AYUDA] Optimizar Consulta
« Respuesta #6 en: 28 Agosto 2013, 07:17 »

En mi maquina local 5.6.12

en la maquina de mi servidor

5.1.70-cll

de hecho me hice una cuenta en freemysqlhosting.com

subi los datos y tambien en ese servidor se tarda bastante

dejo los datos de acceso para que me echen un cable, no se que sea =S

Host: sql2.freemysqlhosting.net
Database name: sql217174
Database user: sql217174
Database password: vL6%qX2%
Port number: 3306


el phpMyAdmin

www.phpmyadmin.co

saludos y de antemano gracias

p.d. alguna otra opcion para realizar esa tarea, una resta tal vez?
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?] MySQL "Registros Faltantes" Optimizar Consulta
Bases de Datos
AlbertoBSD 4 8,465 Último mensaje 19 Abril 2009, 08:06
por -explicito-
ayuda consulta « 1 2 »
Programación Visual Basic
kakashi20 10 3,334 Último mensaje 14 Marzo 2010, 14:42
por raul338
Ayuda con Consulta. « 1 2 ... 7 8 »
Bases de Datos
royerphpmysql 71 26,713 Último mensaje 26 Abril 2010, 04:27
por ^Tifa^
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines