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

Velocidad con consulta

Estas en el tema de Velocidad con consulta en el foro de Mysql en Foros del Web. Hola. Tengo estas consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT count ( * ) distanciaPunto1Punto2             FROM ( SELECT ...
  #1 (permalink)  
Antiguo 25/11/2014, 16:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años
Puntos: 6
Velocidad con consulta

Hola. Tengo estas consulta

Código MySQL:
Ver original
  1. SELECT count(*) distanciaPunto1Punto2
  2.             FROM (SELECT Id_Empleados, (ACOS(
  3.             SIN(RADIANS('41.385064')) *
  4.             SIN(RADIANS(tbl.Ib_Latitud))
  5.             + COS(RADIANS('41.385064'))
  6.             * COS(RADIANS(tbl.Ib_Latitud)) *
  7.             COS(RADIANS('2.173403')
  8.             - RADIANS(tbl.Ib_Longitud))) * 6378) distanciaPunto1Punto2
  9.             FROM empresas_y_negocios_empresas as tbl) T1
  10.             WHERE distanciaPunto1Punto2 <= '4.021'
  11.             AND Id_Empleados = '1'

que directamente en mysql sobre 850000 registros tarda en ejecutarse 15 segundos, tiempo totalmente inaceptable.

Solicito vuestra ayuda para poder acortar al máximo ese tiempo de ejecución. A parte de indexar campos (que ya está), no se me ocurre otra cosa que ejecutarla como un procecimiento almacenado, pero realmente no se si mejorará el tiempo y sobre todo, no tengo practicamente idea sobre procedimientos.

En fin, no se que os parece.
  #2 (permalink)  
Antiguo 25/11/2014, 16:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Velocidad con consulta

En primer lugar, quitale todos los apostrofos a los números de punto flotante. No son cadenas de texto y los estás poniendo como si lo fueran, obligando a MySQL a realzair conversiones implícitas, lo que para 850.000 registros peude ser un problema de performance.
Código MySQL:
Ver original
  1. SELECT count(*) distanciaPunto1Punto2
  2. FROM (SELECT Id_Empleados, (ACOS(SIN(RADIANS(41.385064)) *  SIN(RADIANS(tbl.Ib_Latitud))
  3.             + COS(RADIANS(41.385064))  * COS(RADIANS(tbl.Ib_Latitud)) *  COS(RADIANS(2.173403)
  4.             - RADIANS(tbl.Ib_Longitud))) * 6378) distanciaPunto1Punto2
  5.             FROM empresas_y_negocios_empresas as tbl) T1
  6.             WHERE distanciaPunto1Punto2 <= 4.021 AND Id_Empleados = 1

En segundo lugar, ¿Hay algún indice definido en esa tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/11/2014, 17:06
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años
Puntos: 6
Respuesta: Velocidad con consulta

Hola. Muchas gracias por ayudarme

Dejando la consulta así

Código MySQL:
Ver original
  1. SELECT count(*) distanciaPunto1Punto2
  2.             FROM (SELECT Id_Empleados, (ACOS(
  3.             SIN(RADIANS(41.385064)) *
  4.             SIN(RADIANS(tbl.Ib_Latitud))
  5.             + COS(RADIANS(41.385064))
  6.             * COS(RADIANS(tbl.Ib_Latitud)) *
  7.             COS(RADIANS(2.173403)
  8.             - RADIANS(tbl.Ib_Longitud))) * 6378) distanciaPunto1Punto2
  9.             FROM empresas_y_negocios_empresas as tbl) T1
  10.             WHERE distanciaPunto1Punto2 <= 4.021
  11.             AND Id_Empleados = 1;

Ha mejorado medio segundo.

El campo Id_Empleados es un indice
  #4 (permalink)  
Antiguo 25/11/2014, 17:25
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años
Puntos: 6
Respuesta: Velocidad con consulta

Por si sirve de ayuda, la consulta que he puesto tarda 15 segundo y devuelve 15000.

Si le quito el Id_Empleados = 1, tarde 4 segundos y devuelve 75000

Si le quito el distanciaPunto1Punto2 <= 4.021 tarde 18 segundos y devuelve 130000

Etiquetas: campo, registro, select, sql, velocidad
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 05:20.