Hice lo mismo que el profesor, solo que con un comando mas elaborado. El comando es(son tablas clonadas que NO tienen índice ni clave primaria):
SELECT F.FECHA_VENTA, TP.NOMBRE_DEL_PRODUCTO, ITF.CANTIDAD, ITF.PRECIO
FROM FACTURAS1 F
INNER JOIN ITEMS_FACTURAS1 ITF
ON F.NUMERO = ITF.NUMERO
INNER JOIN TABLA_DE_PRODUCTOS1 TP
ON TP.CODIGO_DEL_PRODUCTO = ITF.CODIGO_DEL_PRODUCTO
WHERE YEAR(F.FECHA_VENTA) =2015;
El costo se hace con:
EXPLAIN FORMAT=JSON SELECT F.FECHA_VENTA, TP.NOMBRE_DEL_PRODUCTO, ITF.CANTIDAD, ITF.PRECIO FROM FACTURAS1 F INNER JOIN ITEMS_FACTURAS1 ITF ON F.NUMERO = ITF.NUMERO INNER JOIN TABLA_DE_PRODUCTOS1 TP ON TP.CODIGO_DEL_PRODUCTO = ITF.CODIGO_DEL_PRODUCTO WHERE YEAR(F.FECHA_VENTA) =2015\G;
COSTO = "7 303 966 290.87"
Con indices y claves primarias con el siguiente query script:
ALTER TABLE FACTURAS ADD INDEX(FECHA_VENTA);
-- ALTER TABLE FACTURAS DROP INDEX FECHA_VENTA_2; para borrar anteriores index's
SELECT F.FECHA_VENTA, TP.NOMBRE_DEL_PRODUCTO, ITF.CANTIDAD, ITF.PRECIO
FROM FACTURAS F
INNER JOIN ITEMS_FACTURAS ITF
ON F.NUMERO = ITF.NUMERO
INNER JOIN TABLA_DE_PRODUCTOS TP
ON TP.CODIGO_DEL_PRODUCTO = ITF.CODIGO_DEL_PRODUCTO
WHERE YEAR(F.FECHA_VENTA) =2015;
Luego el costo es: "313 863.02"
El costo se bajo de "7 303 966 290.87
" a "313 863.02"
.
Y al hacer la simulacion con mysqlslap se nota la diferencia:
Sin PK's ni Indices:
Sinceramente ya me canse de esperar xd , pero estuve unos 20 minutos esperando. Solo fueron 100 usuarios y 10 iteraciones, para ambas queries.
Con PK's e indices: