Foros del Web » Programando para Internet » PHP »

Busqueda muy lenta en base de datos

Estas en el tema de Busqueda muy lenta en base de datos en el foro de PHP en Foros del Web. Hola, vereis tengo una tabla archivos con más de 500.000 registros, utilizo el siguiente código: Código PHP: $search_terms  =  $_GET [ 'q' ]; $tags  =  ...
  #1 (permalink)  
Antiguo 10/11/2008, 13:38
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 4 meses
Puntos: 3
Busqueda muy lenta en base de datos

Hola, vereis tengo una tabla archivos con más de 500.000 registros, utilizo el siguiente código:

Código PHP:
$search_terms $_GET['q'];
$tags explode(" "$search_terms);
$sacar "SELECT DISTINCT id,titulo,rand,artist FROM archivos WHERE (titulo LIKE '%{$tags[0]}%' OR artist LIKE  '%{$tags[0]}%') ";
for (
$x 1$x count($tags); $x++) {
          
$sacar .= "AND (titulo LIKE '%{$tags[$x]}%' OR artist LIKE '%{$tags[$x]}%') ";
}
$sacar .= "LIMIT 10";
echo 
"Consulta al mysql: ".$sacar."<br><br>";
$ask mysql_query($sacar);
while (
$view mysql_fetch_assoc($ask)) {
$titulo $view["titulo"];
$rand $view["rand"];
$artist $view["artist"];
echo 
"<a target=blank href=listen.php?v=".$rand.">".$titulo." (".$artist.")</a>";
echo 
"<br>";


Si por ejemplo escribimos en el buscador: extremoduro ley innata, la consulta, con el código anterior queraría así:

SELECT DISTINCT id,titulo,rand,artist FROM archivos WHERE (titulo LIKE '%extremoduro%' OR artist LIKE '%extremoduro%') AND (titulo LIKE '%ley%' OR artist LIKE '%ley%') AND (titulo LIKE '%innata%' OR artist LIKE '%innata%') LIMIT 10

Pero es muy lento, tengo indices creados en titulo, rand y artista y aun asi, tarda muchisimo, que me sugeris?

Muchas gracias
__________________
aste nagusia
  #2 (permalink)  
Antiguo 10/11/2008, 13:43
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Busqueda muy lenta en base de datos

ummm, la verdad desde mi punto de vista, nada, asi son las sentencias cuando se tienen varios registros.... tardan que se va hacer.

pero lo que si, es que hay otra forma (nose si sea mas rapida, pero hay otra no??), la cual es llamar al select completo, y hacer ese like con php, es decir, puedes buscar la palabras con strpos, y si existen ps, ya esta tu objetivo

suerte.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 10/11/2008, 13:48
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Busqueda muy lenta en base de datos

Hola

te recomendaris probar este aporte, y usar MATCH AGAINST y mas si ya tienes los indices FULL TEXT creados y un motor de almacenamiento MyISAM

http://www.forosdelweb.com/f18/aport...-mysql-632623/

Un saludo
  #4 (permalink)  
Antiguo 10/11/2008, 13:51
 
Fecha de Ingreso: octubre-2005
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: Busqueda muy lenta en base de datos

Échale un ojo a los índices FULLTEXT en MySQL http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html

Los índices FULLTEXT sólo funcionan con el motor MyISAM, que es más rápido que InnoDB.
  #5 (permalink)  
Antiguo 10/11/2008, 15:13
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 4 meses
Puntos: 3
Respuesta: Busqueda muy lenta en base de datos

Vale me he mirado el manual ese de MATCH y he intentado hacer esto:

SELECT titulo, artist, MATCH (titulo, artist) AGAINST ('estopa tragicomedia' IN BOOLEAN MODE) AS coincidencias FROM arch WHERE MATCH (titulo, artist) AGAINST ('estopa tragicomedia' IN BOOLEAN MODE) ORDER BY coincidencias DESC

con una nueva tabla arch que he creado y me da el siguiente error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('estopa tragicomedia' IN BOOLEAN MODE) AS coincidencias FROM arch WHERE MATCH (titul' at line 1
__________________
aste nagusia
  #6 (permalink)  
Antiguo 10/11/2008, 15:20
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Busqueda muy lenta en base de datos

aca...
SELECT titulo, artist,

quitale la ultima coma...despues de artist

suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #7 (permalink)  
Antiguo 10/11/2008, 15:22
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 4 meses
Puntos: 3
Respuesta: Busqueda muy lenta en base de datos

Cita:
Iniciado por masterojitos Ver Mensaje
aca...
SELECT titulo, artist,

quitale la ultima coma...despues de artist

suerte
no
__________________
aste nagusia
  #8 (permalink)  
Antiguo 10/11/2008, 15:33
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años
Puntos: 0
Respuesta: Busqueda muy lenta en base de datos

Porque no te fijas si indexando el campo que mas utilizas en la base te hace un poco mas rapido el asunto?...

Create un indice para ese campo te aseguro que te va a andar mas rapido...


Por otro lado....
La extension mysqli anda 80 veces mas rapido que mysql, ya que es la improved (mejorada).


Proba con eso y me decis. Ahhh me olvidava, si necesitas todos los campos usa SELECT * .... sino trae los que necesitas, SELECT campo1,campo2,campo3... Etc.


Saludos
  #9 (permalink)  
Antiguo 10/11/2008, 15:36
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 4 meses
Puntos: 3
Respuesta: Busqueda muy lenta en base de datos

Cita:
Iniciado por srsombrero Ver Mensaje
Porque no te fijas si indexando el campo que mas utilizas en la base te hace un poco mas rapido el asunto?...

Create un indice para ese campo te aseguro que te va a andar mas rapido...


Por otro lado....
La extension mysqli anda 80 veces mas rapido que mysql, ya que es la improved (mejorada).


Proba con eso y me decis. Ahhh me olvidava, si necesitas todos los campos usa SELECT * .... sino trae los que necesitas, SELECT campo1,campo2,campo3... Etc.


Saludos
Tengo todo eso hecho, gracias, pero el problema ahora viene con la duda anterior, no rula el MATCH AGAINTS
__________________
aste nagusia
  #10 (permalink)  
Antiguo 10/11/2008, 15:44
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Busqueda muy lenta en base de datos

Hola

no rula el MATCH AGAINTS por que? ya te dijeron que tienes una coma de mas

Podrias explicarlo.

un saludo
  #11 (permalink)  
Antiguo 10/11/2008, 15:48
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Busqueda muy lenta en base de datos

jaja, ps si te fijaste bien aqui: Click en MasterOjitos Link

la coma de mas no es demas, ya que hay un campo mas (MATCH AGAINTS).... pero:
te debe faltar esto en tu base de datos:
FULLTEXT KEY `buscador` (`titulo`,`artist`)

suerte.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #12 (permalink)  
Antiguo 10/11/2008, 16:00
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Busqueda muy lenta en base de datos

Tienes razon masterojitos.

pero tambien necesita un motor de almacenamiento MyISAM

Un saludo
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 19:26.