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

Que query es el más correcto y rápido ?

Estas en el tema de Que query es el más correcto y rápido ? en el foro de Bases de Datos General en Foros del Web. Hola amigos, tengo esta dudota, cual es de los 2 quierys que menciono es el que en cuestion de sintaxys es el correcto y el ...
  #1 (permalink)  
Antiguo 13/02/2012, 12:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 7 meses
Puntos: 9
Exclamación Que query es el más correcto y rápido ?

Hola amigos, tengo esta dudota, cual es de los 2 quierys que menciono es el que en cuestion de sintaxys es el correcto y el que nos de mejor rendimiento en la búsqueda:

CASO 1:

SELECT usuarios.id, rutinas.userid
FROM usuarios, rutinas
WHERE usuarios.id = rutinas.userid

CASO 2:

SELECT u.id, r.userid
FROM usuarios as u, rutinas as r
WHERE u.id = r.userid

??? Como ven que CASO es el mejor para usar y PORQUE ?
  #2 (permalink)  
Antiguo 13/02/2012, 12:38
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: Que query es el más correcto y rápido ?

Los alias se usan para simplificar la consulta, pero no le agregan eficiencia.
Ambas consultas son procedimentalmente idénticas.

Distinto sería la performance de:
Código MySQL:
Ver original
  1. SELECT u.id, r.userid
  2. FROM usuarios u INNER JOIN rutinas r ON u.id = r.userid
donde si existe diferencia de performance (sólo medible ante cantidades grandes de registros,.
__________________
¿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 13/02/2012, 18:11
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Que query es el más correcto y rápido ?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Distinto sería la performance de:
Código MySQL:
Ver original
  1. SELECT u.id, r.userid
  2. FROM usuarios u INNER JOIN rutinas r ON u.id = r.userid
donde si existe diferencia de performance (sólo medible ante cantidades grandes de registros,.
gnzsoloyo, esto no es realmente así, considera los escenarios:

1. Diferente sintaxis, mismo plan de ejecución. Para un conjunto de filas que se pueda obtener de diferentes formas, por ejemplo, el join que planteas con ..FROM usuarios INNER JOIN rutinas y ..FROM usuarios, rutinas WHERE id = userid, el optimizador genera el mismo plan de ejecución, lo que significa mismo rendimiento.

2. Misma sintaxis, diferente plan de ejecución. El optimizador puede resolver la misma consulta con diferentes planes de ejecución, esto sucede por varios factores como el incremento o decremento de filas totales, los índices disponibles, los entornos de hardware, etc., es decir, una consulta puede tener buen rendimiento hoy y mal rendimiento mañana, o buen rendimiento en entorno de test y mal rendimiento en producción.

En conclusión, la comparación del rendimiento entre consultas solo se puede hacer comparando los planes de ejecución, no se relaciona con la sintaxis.

Saludos
  #4 (permalink)  
Antiguo 13/02/2012, 19:02
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: Que query es el más correcto y rápido ?

En los escenarios, matanga, tienes que considerar el DBMS que estás usando, cosa que nuestro estimado marco64yes se ha olvidado mencionar.
El esquema de optimización que yo propongo es para MySQL. En ese sentido el INNER JOIN es más eficiente que usar la coma, a pesar de ser semánticamente distintas, porque el matching ocurre en la lectura de las tablas, mientras que en el caso de las comas con la condición en el WHERE ocurre luego de leídas ambas tablas.
Además, usar la coma aumenta la cantidad de bloque de datos leídos, mientras que el INNER JOIN sólo lee completa la primera tabla y descarta aquellos donde no hay coincidencias en la segunda. Por eso la sintaxis es importante.
El parser de MySQL usará diferentes algoritmos de acuerdo a lo que encuentre, pero desde el punto de vista del análisis previo, siempre será el INNER JOIN el que genere la mejor condición, dependiendo de algunos otros factores.
Ahora bien, si hablamos de Oracle o SQL Server, especialmente del segundo, el plan más eficiente será aquel que genere la menor cantidad de accesos a disco, pero para determinarlo habría que conocer la cardinalidad de los índices, el tipo de indices usados, etc. Y la forma en que cada uno implementa el JOIN hace que la sintaxis también pese a la hora de resolver el plan de consulta...
No te olvides que siempre puedes hacer que cambiando algún parámetro, el plan de consulta cambie. No todo lo decide el optimizador. Tu puedes conducirlo hacia otro resultado...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/02/2012, 20:53
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Que query es el más correcto y rápido ?

Es correcto que deberíamos considerar el motor, no todos son iguales, aún así, la idea general es que una consulta se debe evaluar o comparar por su plan de ejecución, ya que es donde se ve el orden y operaciones que realiza el motor para obtener los datos (costo cpu, cant. bloques, orden de lectura de tablas, tipo de join, etc).

En el caso particular del JOIN vs WHERE, lo he probado en MySQL, SQL Server y Oracle, y siempre obtuve el mismo plan de ejecución, puedes ver este blog http://www.mysqlperformanceblog.com/...oin-and-where/ de autor reconocido que publicó un libro sobre rendimiento en MySQL y asegura que vio el código del motor y no hay diferencia en la forma de resolver las consultas.

Saludos

Etiquetas: correcto, query
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:43.