Foros del Web » Programando para Internet » PHP »

ayuda con select y problema de NULL

Estas en el tema de ayuda con select y problema de NULL en el foro de PHP en Foros del Web. Hola a todos, tengo la siguiente consulta a mysql $sql_1 = mysql_query("SELECT nombre,tomo,folio from publeje where nombre like '$busqueda%' and (tomo is not NULL and ...
  #1 (permalink)  
Antiguo 17/07/2009, 18:40
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
ayuda con select y problema de NULL

Hola a todos, tengo la siguiente consulta a mysql

$sql_1 = mysql_query("SELECT nombre,tomo,folio from publeje where nombre like '$busqueda%' and (tomo is not NULL and folio is not NULL) ") or die(mysql_error());

mi problema esta en que lo que necesito es hacer la consulta de esa manera que el tomo y folio no sean nulos, el problema es que de esa forma las primeras busquedas tardan como 6 seg debido a esa condifcion, yo tengo indexado el tomo y folio (juntos) y el nombre .
hay alguna forma de hacer esa consulta pero que sea mas rapido la respuesta?.
aclaro que estoy buscando en 240.000 registros.
Lo raro es que si no pongo la condicion de nulos osea solo que nombre like busqueda anda rapido.
Espero que me puedan ayudar.
esta bien indexados asi osea indexar nombre, y (tomo y folio)? o hay alguna forma de indexar mejor?-

Saludos y gracias.
  #2 (permalink)  
Antiguo 17/07/2009, 18:59
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: ayuda con select y problema de NULL

Hay que diferenciar un índice de 3 campos y 3 indices de un campo. En el segundo caso, en tu consulta solo se va a usar uno de los índices.

Si vas a crear un índice con 3 campos, ten en cuenta el orden. Debe coincidir con el de la consulta.

Seguramente te vaya más lento porque no escoge bien el índice.
Puedes probar además de lo dicho anteriormente, algo así:

Código:
SELECT nombre,tomo,folio from publeje USE INDEX(nombre) where nombre like '$busqueda%' and (tomo is not NULL and folio is not NULL)

o

SELECT nombre,tomo,folio from publeje where nombre like '$busqueda%' HAVING (tomo is not NULL and folio is not NULL)
  #3 (permalink)  
Antiguo 17/07/2009, 19:04
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: ayuda con select y problema de NULL

los indices son diferentes, osea tengo 1 con los nombre y otro que esta el tomo y folio juntos.
que haria having en el segundo caso?

cual seria la manera correcta de indexar las columas para esa consulta?

gracias.

Última edición por diegomel; 17/07/2009 a las 19:09
  #4 (permalink)  
Antiguo 17/07/2009, 19:09
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: ayuda con select y problema de NULL

Usar having seria la opción menos elegante. Básicamente es como si hiciera una consulta sin él, pero una vez obtenidos los resultados, y antes de entregarlos, descarta aquellas filas que no cumplan la condición.
  #5 (permalink)  
Antiguo 17/07/2009, 19:17
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: ayuda con select y problema de NULL

a listo, y el tema de indexar, cual seria la mejor manera de hacerlo para la consulta que escribi yo?.

gracias nuevamente.
  #6 (permalink)  
Antiguo 17/07/2009, 19:30
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: ayuda con select y problema de NULL

Lo suyo seria crear un índice con los 3 campos.

CREATE INDEX nom_tomo_folio ON publeje (nombre,tomo,folio)

y la consulta seria la que tenias originalmente

Para el nombre igual tienes que especificar la longitud depende del tipo de campo.

http://dev.mysql.com/doc/refman/5.0/...ate-index.html

O lo haces con phpmyadmin directamente.
  #7 (permalink)  
Antiguo 17/07/2009, 19:52
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: ayuda con select y problema de NULL

uso navicat para hacer los indices y administrar mysql.
voy a probar haciendo 1 indice con esas 3 columnas entonces, otra consulta si no es molestia, el indice lo usa automaticamente mysql o hay que aclararle cual usar?

saludos y muchisimas gracias.
  #8 (permalink)  
Antiguo 17/07/2009, 20:12
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: ayuda con select y problema de NULL

Lo usa automáticamente. Lo que pasa es que algunas pocas veces no acierta a elegir el mejor, y en esos casos se le puede indicar con USE INDEX, por ejemplo.
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 11:53.