Código:
SELECT
SUM(IF(id_tipo_factura=2, total_factura,0) total_pedidos,
SUM(IF(id_tipo_factura=3, total_factura,0) total_generales,
SUM(IF(id_tipo_factura=1, total_factura,0) total_emitidas
FROM facturas
WHERE
YEAR(fecha)=2008;
1.
La cláusula AS es innecesaria para crear alias. MySQL
asume que el siguiente string a un campo del SELECT o de una tabla, o al paréntesis de cierre de una subconsulta es un ALIAS.
El AS era parte del estándar de ANSI-SQL, pero todos los motores lo eliminaron como exigencia desde hace mucho. Ahora es opcional, y se conserva por cuestiones de compatibilidad con servidores viejos que puedan estar corriendo.
2. SI vas a hacer un JOIN entre tablas, asegúrate de determinar los campos de relación entre las tuplas, para que de esa forma no esté operando como un
producto cartesiano. Ese era uno de tus problemas (falta de selectividad).
3. Si el campo contiene números, no lo compares con un string sino con otro número, de lo contrario obligas a MySQL a hacer una
conversión implícita y eso resiente la performance cuando se trata de grandes cantidades de tuplas (en pocas no lo notarás).