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

Problema de índices

Estas en el tema de Problema de índices en el foro de Mysql en Foros del Web. Tengo un problema a la hora de presentar listados ya que según va creciendo la tabla se va ralentizando la respuesta. La cuestión es que ...
  #1 (permalink)  
Antiguo 15/11/2007, 18:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 4 meses
Puntos: 4
Problema de índices

Tengo un problema a la hora de presentar listados ya que según va creciendo la tabla se va ralentizando la respuesta.

La cuestión es que me está ignorando los índices, siempre realiza un recorrido, os pongo la consulta y los índices, a ver que se puede hacer:

SELECT * FROM tabla WHERE alta>$baja and codigo=$cod and activo=1

Hay un indice para alta, codigo y he probado de todo, alta y codigo sólos, alta, codigo y activo, vamos todas las posibilidades que se os ocurran y nada, explain me devuelve que hace el recorrido completo en busca de la selección, aparte que se nota como se engancha.
También he probado a forzar que use el índice y nada, debe ser que no le sirve para nada.

Imagino que el problema está en el mayor entre alta y baja que hace que el índice no le sirva, pero es que no se que hacer ya que no puedo evitar el uso de dicha comparación.
  #2 (permalink)  
Antiguo 15/11/2007, 21:23
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 4 meses
Puntos: 655
Re: Problema de índices

Hagamos algo, muestra la estructura de la tabla y en ves de utilizar variables de programación como $baja y $cod, pon datos reales.

¿Porqué eso? Muy sencillo, MySQL o cualquier manejador de BD, trabaja con valores y no con variables.
¿Cómo podes asegurar que el valor que tienen esas variables están bien?
¿Cómo podes asegurar que alguna de esas variables no tenga un dato incorrecto?

Cuando uno realiza pruebas de ese tipo, monitorea las variables, luego toma el valor y se ejecuta la consulta SQL directamente en el motor de BD en modo comando, con phpmyadmin, o cualquier otro GUI de administración MySQL.

Si los conoces, también debes saber que NO utilizan variables sino valores.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 15/11/2007, 23:46
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 4 meses
Puntos: 4
Re: Problema de índices

Hola BrujoNic,

La consulta con datos reales sería la siguiente:

SELECT * FROM tabla WHERE alta>$baja and codigo=$cod and activo=1 donde:

alta -> Campo integer en la base de que se inserta mediante time(); en el momento del alta del registro.

$baja -> Se calcula en el momento de la consulta y es un integer que viene de time()-segundos, es la fecha desde la que se quieren mostrar los registros.

codigo -> Es un integer que contiene la categoría del registro.

$cod -> Es el codigo de la categoría que se quiere presentar

activo -> Es si está activo (1) o no (0) el registro para presentarlo o no.

Muchas gracias y un saludo
  #4 (permalink)  
Antiguo 16/11/2007, 01:01
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 4 meses
Puntos: 655
Re: Problema de índices

Creo que no me comprendiste ya que estas poniendo lo mismo.

Te explico, creo que estas programando en PHP. Lo que te trato de decir es lo siguiente:
$baja y $cod se cargan por medio de campos, formularios o lo que sea en php.

Antes de ejecutar el SQL con variable, dale un echo $baja y echo $cod el resultado son los valores.

Eso es lo que debes probar en phpmyAdmin, modo comando o cualquier programa GUI para administrar MySQL ya que eso SI lo puede interpretar.

Si ejecutas en phpmyadmin o cualquier administrador de MySQL SELECT * FROM tabla WHERE alta>$baja and codigo=$cod and activo=1, te va a dar un error, porque NO sabe que es $baja ni $cod, ahora me comprendes?

Es por lo mismo que te puse que leyeras la función de la sección de Base de Datos, ya que esa no es una instrucción pura de SQL.

Eso es lo que debes hacer para determinar con mayor precisión si el problema está en el código y los valores de esas variables, o en la consulta hecha en ese SELECT.

Espero haber sido claro ahora.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #5 (permalink)  
Antiguo 16/11/2007, 01:51
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 4 meses
Puntos: 4
Re: Problema de índices

Hola lo que me comentas ya lo he hecho en phpmyadmin con valores reales y con un explain y me devuelve que no usa el índice y que revisa todas las filas de la tabla para obtener el sesultado, las 100.000 que tiene actualmente.

Última edición por chelsae; 17/11/2007 a las 11:35
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 10:17.