Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/11/2012, 12:43
Avatar de gnzsoloyo
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: Consulta a una tabla sobre otra tabla filtrada

1) Quita el ORDER BY. En ese contexto es innecesario, irrelevante y destruye la performance del sistema, ya que es primer campo y la subconsulta lo usa de PK.

2) Crea un indice en la tabla transacciones sobre el campo CODIGO.
Las cláusulas ORDER BY y GROUP BY se debe usar si y sólo si es absolutamente necesario, y de ser posible sobre campos donde shaya indices definidos.

3) Si Codigo es columna numérica (INT, SMALLINT, BIGINT, etc), no la pongas entre apóstrofes, los apóstrofos se usan para cadenas de texto, no para números. Eso obliga a MySQL a realizar una conversión implícita innecesaria, que también quita performance.

4) Usa IN y no OR para consultar N valores referidos al mismo campo. Es más eficiente.
Código MySQL:
Ver original
  1. SELECT Codigo,fecha,debe,haber FROM transacc  
  2. WHERE codigo IN
  3.     (SELECT codigo FROM clientes
  4.      WHERE codigo IN(1210004099, 1210003099)
  5. ORDER BY codigo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/11/2012 a las 12:51