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

Consulta Lenta.

Estas en el tema de Consulta Lenta. en el foro de Mysql en Foros del Web. Hola, espero que me puedan ayudar con este problema. Tengo una consulta que le toma alrededor de 40 segundo en ejecutarse en un servidor virtual. ...
  #1 (permalink)  
Antiguo 07/04/2008, 15:37
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Consulta Lenta.

Hola, espero que me puedan ayudar con este problema.
Tengo una consulta que le toma alrededor de 40 segundo en ejecutarse en un servidor virtual.

Basicamente hago una seleccion multiple entre una tabla de alrededor de 9mil registros, y otro de 24 mil registros.

La consulta es la siguiente :

SELECT vu.userid, vu.username, fs.score FROM flash_score AS fs, vBulletin_user AS vu WHERE fs.id_user LIKE vu.userid ORDER BY fs. score DESC LIMIT 0, 100;


Hice un EXPLAIN a mi consulta, y obtuve lo siguiente :


+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+
| 1 | SIMPLE | fs | ALL | NULL | NULL | NULL | NULL | 9032 | Using temporary; Using filesort |
| 1 | SIMPLE | vu | ALL | NULL | NULL | NULL | NULL | 24309 | Using where; Using join buffer |
+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+


Me imagino que debido al escaneo completo de las dos tablas mezcladas, provoca dicha lentitud mencionada. En ambas tablas tengo un campo ID que son de caracter PRIMARY y es donde hace la comparacion. No se de que manera podria hacer que dicha consulta se ejecute mas rapido. Ya lei acerca de los campos INDEX, pero no se si se aplica en mi caso, debido a que en la clausula WHERE unicamente busco por indice y ya estan como indices PRIMARY KEY.


Espero que me puedan ayudar, saludos!
__________________
www.subflash.com <-----visita
  #2 (permalink)  
Antiguo 07/04/2008, 23:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta Lenta.

Yo haría primero varias cosas
pondría un índice a Score de la tabla flash_score. También indexaría, si no es Primary Key sino Foreign Key, el userid de vBulletin_user, que imagino que será campo numérico INT, y luego haría la consulta con INNER JOIN, si es que son PK y FK, y por supuesto no haría nunca una consulta de comparación entre PK y FK con LIKE y tampoco entre campos que son numéricos. No sé el tipo de tablas que tienes, pero prueba esto después de hacer esos índices que te he dicho.
Si relacionas las tablas id_user y userid
SELECT vu.userid, vu.username, fs.score FROM flash_score AS fs INNER JOIN vBulletin_user AS vu ON fs.id_user = vu.userid ORDER BY fs. score DESC LIMIT 0, 100;

y si no son PK y FK también podría usarse esta otra, aunque yo prefiero las relaciones con JOIN
SELECT vu.userid, vu.username, fs.score FROM flash_score AS fs, vBulletin_user AS vu WHERE fs.id_user = vu.userid ORDER BY fs. score DESC LIMIT 0, 100;

vigila además que userid sea INT. Indexa los campos sobre los que hagas búsquedas y ordenaciones frecuentemente (aunque esto último también dependerá de la cardinalidad). Limita la consulta, en lugar de a 100, a 50, si no necesitas ver más de 50, y te aconsejaría alguna otra cosa sobre la estructura de tu base si viéramos las tablas, las relaciones, la naturaleza de los campos, etc., y también qué es lo que quieres sacar de esa base y cómo.

Y tal vez mejore la velocidad... Imagino que la que buscas es la primera que te he puesto.

Última edición por jurena; 08/04/2008 a las 01:17
  #3 (permalink)  
Antiguo 08/04/2008, 12:23
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Re: Consulta Lenta.

Uta....mejoro la velocidad increiblemente.

Oye no quieres tener un hijo conmigo? xD
Eres Dios.

Basicamente en que consiste INNER JOIN y porque hace que mejore notablemente la velocidad en contra de la comparacion de ID's? Creo que la parte de la relacion de tablas esta muy bien (o lo que se llama normalizacion de base de datos)....pero cuando hago seleccion de tablas multiples (con el metodo que hago mal, comparando ID's) es cuando se alenta.

Por otro lado, me diste un buen tip...hasta donde habia leido, solo indexeaba campos que estuvieran en WHERE y tuvieran valores variados, pero no sabia que en ORDER BY tambien aplicaba.

Muchisimas gracias por tu ayuda. Saludos!
__________________
www.subflash.com <-----visita
  #4 (permalink)  
Antiguo 08/04/2008, 12:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta Lenta.

Cuando trabajas con tablas relacionadas mediante PK y FK conviene aprovechar
la optimización de los índices que procura el INNER JOIN, LEFT JOIN, etc. Yo no soy técnico, pero te recomiendo que leas algunos de los posts de gnzsoloyo que, además de las soluciones, ofrecen una información técnica de primer nivel, si se me permite decirlo. Pulsa sobre su nick y lee algunos de sus posts acerca del uso de índices y demás.
  #5 (permalink)  
Antiguo 08/04/2008, 12:54
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Re: Consulta Lenta.

Muchisimas gracias por tu ayuda.
Definitivamente este es un tema que no conocia. Saludos! =D
__________________
www.subflash.com <-----visita
  #6 (permalink)  
Antiguo 08/04/2008, 12:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta Lenta.

Leinad256
A veces es difícil entender la naturaleza de los inner join, left join, right join, etc., con sus respectivos outer.
Yo, sin entrar como te digo en cuestiones muy técnicas, te diré que, una vez asimilada la naturaleza de las bases de datos relacionales, de los PK y FK, de su naturaleza numérica, índices, etc., a mí me ayudó a comprender mejor lo demás lo que encontré en esta dirección, que recomiendo a todos los no técnicos que tengan dudas al respecto.
http://quarkblog.org/2007/04/22/join...seres-humanos/
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 02:47.