Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas al listar galeria de clientes

Estas en el tema de Problemas al listar galeria de clientes en el foro de Mysql en Foros del Web. Buenas Tardes necesito optimizar esta consulta ya que me sobre carga el servidor lo que pasa que necesito listar las galerias de imagenes de las ...
  #1 (permalink)  
Antiguo 23/07/2012, 11:02
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Problemas al listar galeria de clientes

Buenas Tardes necesito optimizar esta consulta ya que me sobre carga el servidor lo que pasa que necesito listar las galerias de imagenes de las personas que tienen cuenta en mi sitio esta es la consulta
Código MySQL:
Ver original
  1. clientes.idCliente,
  2. clientes.nombres,
  3. COUNT(distinct anuncios.idAnuncio) AS totalAnuncios, COUNT(galeriaclientes.idGC) AS totalGaleria,
  4. clientes.apellidoPaterno,
  5.  clientes.apellidoMaterno,
  6.  perfiles.nombre AS tipoCliente,
  7. clienteinfo.esEmpresa,
  8. clienteinfo.nombreEmpresa
  9. FROM clientes
  10. LEFT OUTER JOIN galeriaclientes ON (clientes.idCliente=galeriaclientes.idCliente) LEFT OUTER JOIN anuncios ON (clientes.idCliente=anuncios.idCliente)
  11. LEFT OUTER JOIN usuarioclientes ON (clientes.idCliente=usuarioclientes.idCliente) INNER JOIN perfiles ON (usuarioclientes.idPerfil=perfiles.idPerfil)
  12. INNER JOIN clienteinfo ON (clientes.idCliente=clienteinfo.idCliente)
  13. clientes.idCliente,
  14. clientes.nombres,
  15.  clientes.apellidoPaterno,
  16. clientes.apellidoMaterno,
  17. perfiles.nombre,
  18. clienteinfo.esEmpresa,
  19. clienteinfo.nombreEmpresa
  20.  clientes.nombres,
  21. clienteinfo.nombreEmpresa
me lista asi los datos
# / Cliente /Cuenta /Imagenes /Anuncios /Estado
1 /Estancia del Totoral /Cuenta Gratuita /0 /1 /Sin Imagenes
2 /Van Hasselt /Cuenta Gratuita /1 /1 /Con Imagenes
3 /Agícola Neuquén /Cuenta Gratuita /0 /0 /Sin Imagenes
4 /Agricola Gildemeister S.A. /Cuenta Silver /144 /12 /Con Imagenes
5 /Agrícola Viveros Parlier Ltda /Cuenta Gratuita /0 /17 /Sin Imagenes
6 /Agrocor Ltda. Cuenta Gratuita /1 /1 /Con Imagenes

estas son las estructuras de mis tablas
tabla Clientes
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `clientes` (
  2.   `idCliente` int(11) NOT NULL auto_increment,
  3.   `idTipoCliente` int(11) NOT NULL,
  4.   `nombres` varchar(100) NOT NULL,
  5.   `apellidoPaterno` varchar(80) default NULL,
  6.   `apellidoMaterno` varchar(80) default NULL,
  7.   `rut` varchar(12) default NULL,
  8.   `fNacimiento` date default NULL,
  9.   `sexo` char(1) default NULL,
  10.   `email` varchar(100) default NULL,
  11.   `fhCreacion` datetime NOT NULL,
  12.   `fhModificacion` datetime NOT NULL,
  13.   `idEstado` int(11) NOT NULL,
  14.   PRIMARY KEY  (`idCliente`),
  15.   KEY `nombres` (`nombres`),
  16.   KEY `apellidoPaterno` (`apellidoPaterno`),
  17.   KEY `fhCreacion` (`fhCreacion`),
  18.   KEY `idEstado` (`idEstado`)
  19. )

Tabla de anuncios

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `anuncios` (
  2.   `idAnuncio` int(11) NOT NULL auto_increment,
  3.   `idTipoAnuncio` int(11) NOT NULL,
  4.   `idCliente` int(11) NOT NULL,
  5.   `titulo` varchar(200) NOT NULL,
  6.   `fhCreacion` datetime NOT NULL,
  7.   `fhModificacion` datetime NOT NULL,
  8.   `fhPublicacion` datetime NOT NULL,
  9.   `idEstado` int(11) NOT NULL,
  10.   PRIMARY KEY  (`idAnuncio`),
  11.   KEY `idTipoAnuncio` (`idTipoAnuncio`),
  12.   KEY `idCliente` (`idCliente`),
  13.   KEY `fhPublicacion` (`fhPublicacion`),
  14.   KEY `idEstado` (`idEstado`),
  15.   FULLTEXT KEY `titulo` (`titulo`)
  16. )

Tabla Galeria de clientes

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `galeriaclientes` (
  2.   `idGC` int(11) NOT NULL auto_increment,
  3.   `idCliente` int(11) NOT NULL,
  4.   `nombreImagen` varchar(100) NOT NULL,
  5.   `orden` int(11) NOT NULL,
  6.   `logo` varchar(11) NOT NULL,
  7.   `fhCreacion` datetime NOT NULL,
  8.   `fhModificacion` datetime NOT NULL,
  9.   `idEstado` int(11) NOT NULL,
  10.   PRIMARY KEY  (`idGC`)
  11. )
Tabla clientes info
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `clienteinfo` (
  2.   `idClienteInfo` int(11) NOT NULL auto_increment,
  3.   `idCliente` int(11) NOT NULL,
  4.   `esEmpresa` char(1) NOT NULL default '0',
  5.   `nombreEmpresa` varchar(120) NOT NULL,
  6.   `fhCreacion` datetime NOT NULL,
  7.   `fhModificacion` datetime NOT NULL,
  8.   `idEstado` int(11) NOT NULL,
  9.   PRIMARY KEY  (`idClienteInfo`),
  10.   KEY `esEmpresa_2` (`esEmpresa`)
  11. )


Tabla de perfiles de clientes

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `perfiles` (
  2.   `idPerfil` int(11) NOT NULL auto_increment,
  3.   `prioridad` int(11) NOT NULL,
  4.   `nombre` varchar(80) NOT NULL,
  5.   `idEntidad` int(11) NOT NULL,
  6.   `descripcion` text,
  7.   `fhCreacion` datetime NOT NULL,
  8.   `fhModificacion` datetime default NULL,
  9.   `idEstado` varchar(11) NOT NULL,
  10.   PRIMARY KEY  (`idPerfil`)
  11. )
y Tabla de Usuario Clientes
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarioclientes` (
  2.   `idUsuarioClientes` int(11) NOT NULL auto_increment,
  3.   `idPerfil` int(11) NOT NULL,
  4.   `idCliente` int(11) NOT NULL,
  5.   `fhCreacion` datetime NOT NULL,
  6.   `fhModificacion` datetime NOT NULL,
  7.   `fhUltimoAcceso` datetime NOT NULL,
  8.   `idEstado` int(11) NOT NULL,
  9.   PRIMARY KEY  (`idUsuarioClientes`)
  10. )
espero aberme esplicado bien ya que me tiene medio complicado esta consulta desde ya muchas gracias
  #2 (permalink)  
Antiguo 23/07/2012, 11:30
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas al listar galeria de clientes

Hola Rasec101:

De entrada, no hay mucho que cambiar en tu consulta, sólo debes tener cuidado en utilizar índices para todos los campos que están involucrados en los JOIN's...

por ejemplo, podrías probar poner como índice los siguientes campos:

galeriaclientes.idCliente
usuarioclientes.idCliente
usuarioclientes.idPerfil
clienteinfo.idCliente

Si el número de registros que te regresa la consulta es excesivo, podrías considerar implementar un proceso de paginación. Finalmente dale un EXPLAIN a la consulta para ver qué diagnóstico da y ver si es posible alguna otra mejora.

Revisa tus tablas y si alguna de ellas es muy grande (tiene muchos registros), considera si es necesaria incluirla en la consulta o si puedes prescindir de ella, y presentarla como una consulta opcional.

Saludos
Leo.
  #3 (permalink)  
Antiguo 23/07/2012, 11:41
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Problemas al listar galeria de clientes

gracias por responder leonardo_josue tengo paginacion para los registros y en la tabla de anuncios tengo 1104 registros, en la tabla clientes tengo 1478 registros ,el clientes info 1466, en la tabla galeria clientes tengo 1474 registros, en la tabla perfiles tengo 7 registros, y en la tabla usuario clientes tengo 1474 registros. La verdad ne satura demaciado el servidor esta consulta y no encuentro forma de hacerla mas rapida ya que son los datos que necesito para tener un listado completo de la cantidad de imagenes y anuncios de los clientes
  #4 (permalink)  
Antiguo 23/07/2012, 12:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas al listar galeria de clientes

Hola otra vez Rasec101:

El número de registros no es problema... son muy pocos para considerar que puede prescindir de alguna de estas tablas pudiera mejorar la consulta... en lo particular he trabajado con tablas con cientos de miles de registro sin ningún problema... Aquí tendrías que aclararnos a que te refieres cuando dices que te satura el servidor... creo que el problema va más por alguna configuración que por la consulta en si.

Prueba lo que te comenté acerca de poner como índices los campos que te faltan y que estás utilizando en los JOIN's... también pon aquellos que están involucrados en el GROUP BY y en el ORDER BY

clienteinfo.nombreEmpresa
perfiles.nombre

Veo que una de tus tablas tiene un índice FULLTEXT... Prueba quitando a modo de prueba esta tabla (y su correspondiente COUNT) para ver el comportamiento... si mejora el rendimiento de la consulta, podríamos modelar algo diferente para obtener el mismo resultado.

Saludos
Leo.
  #5 (permalink)  
Antiguo 23/07/2012, 14:30
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Problemas al listar galeria de clientes

Gracias nuevamente leonardo_josue realice cambios en los indices y acelero un poco más la consulta y me funciona bien local el problema es con el servicio de hosting y lamentablemente no puedo hacer mucho en ese sentido ya que no tengo acceso a la configuracion asique voy a tener que peliar con ellos para arreglar el asunto.

Etiquetas: galeria, join, select, tabla, cliente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:25.