Lo que abordaría su pregunta es el tema ÚNASE A LA DESCOMPOSICIÓN.
De acuerdo con la página 209 del libro
Puede descomponer una combinación ejecutando múltiples consultas de tabla única en lugar de una combinación multitarea y luego realizando la combinación en la aplicación. Por ejemplo, en lugar de esta consulta única:
SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id = tag.id
JOIN post ON tag_post.post_id = post.id
WHERE tag.tag = 'mysql';
Puede ejecutar estas consultas:
SELECT * FROM tag WHERE tag = 'mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id IN (123,456,567,9098,8904);
¿Por qué demonios harías esto? A primera vista, parece un desperdicio, porque ha aumentado el número de consultas sin obtener nada a cambio. Sin embargo, tal reestructuración en realidad puede brindar importantes ventajas de rendimiento:
- El almacenamiento en caché puede ser más eficiente. Muchas aplicaciones almacenan en caché los "objetos" que se asignan directamente a las tablas. En este ejemplo, si el objeto con la etiqueta
mysql
ya está en caché, la aplicación omitirá la primera consulta. Si encuentra publicaciones con un ID de 123, 567 o 908 en la memoria caché, puede eliminarlas de la IN()
lista. El caché de consultas también podría beneficiarse de esta estrategia. Si solo una de las tablas cambia con frecuencia, descomponer una unión puede reducir el número de invalidaciones de caché.
- Ejecutar las consultas individualmente a veces puede reducir la contención de bloqueo
- Hacer uniones en la aplicación hace que sea más fácil escalar la base de datos al colocar tablas en diferentes servidores.
- Las consultas en sí mismas pueden ser más eficientes. En este ejemplo, el uso de una
IN()
lista en lugar de una combinación permite a MySQL ordenar las ID de fila y recuperar filas de manera más óptima de lo que podría ser posible con una combinación.
- Puede reducir los accesos a filas redundantes. Hacer una unión en la aplicación significa recuperar cada fila solo una vez, mientras que una unión en la consulta es esencialmente una desnormalización que puede acceder repetidamente a los mismos datos. Por la misma razón, dicha reestructuración también podría reducir el tráfico total de la red y el uso de memoria.
- Hasta cierto punto, puede ver esta técnica como la implementación manual de una combinación hash en lugar del algoritmo de bucles anidados que MySQL usa para ejecutar una combinación. Una combinación hash podría ser más eficiente.
Como resultado, las uniones de acciones en la aplicación pueden ser más eficientes cuando almacena en caché y reutiliza una gran cantidad de datos de consultas anteriores, distribuye datos en varios servidores, reemplaza las uniones por IN()
listas o una unión hace referencia a la misma tabla varias veces.
OBSERVACIÓN
Me gusta la primera viñeta porque InnoDB es un poco pesado cuando verifica la caché de consultas.
En cuanto al último punto, escribí una publicación el 11 de marzo de 2013 ( ¿Hay una diferencia de ejecución entre una condición JOIN y una condición WHERE? ) Que describe el algoritmo de bucle anidado. Después de leerlo, verá cuán buena puede ser la descomposición de unión.
En cuanto a todos los demás puntos del libro , los desarrolladores realmente buscan el rendimiento como resultado final. Algunos confían en medios externos (fuera de la aplicación) para mejorar el rendimiento, como usar un disco rápido, obtener más CPU / núcleos, ajustar el motor de almacenamiento y ajustar el archivo de configuración. Otros se abrocharán y escribirán un mejor código. Algunos pueden recurrir a la codificación de toda la inteligencia empresarial en los Procedimientos almacenados, pero aún así no aplican la descomposición conjunta (consulte ¿Cuáles son los argumentos en contra o para poner la lógica de la aplicación en la capa de la base de datos? Junto con las otras publicaciones). Todo depende de la cultura y la tolerancia de cada tienda de desarrolladores.
Algunos pueden estar satisfechos con el rendimiento y no tocar más el código. Otros simplemente no se dan cuenta de que hay grandes beneficios que uno puede cosechar si intentan unir la composición.
Para aquellos desarrolladores que estén dispuestos ...
DARLE UNA OPORTUNIDAD !!!