sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo funcionan exactamente las consultas de la base de datos PHP/MySQL?

Los detalles dependen de la implementación pero generalmente Hablando, los resultados se almacenan en búfer. Ejecutar una consulta en una base de datos devolverá un conjunto de resultados. Si es lo suficientemente pequeño, todos los resultados pueden devolverse con la llamada inicial o algunos pueden devolverse más resultados a medida que itera sobre el objeto de resultado.

Piensa en la secuencia de esta manera:

  1. Abres una conexión a la base de datos;
  2. Posiblemente hay una segunda llamada para seleccionar una base de datos o podría hacerse como parte de (1);
  3. Ese paso de autenticación y conexión es (al menos) un viaje de ida y vuelta al servidor (ignorando las conexiones persistentes);
  4. Ejecuta una consulta en el cliente;
  5. Esa consulta se envía al servidor;
  6. El servidor tiene que determinar cómo ejecutar la consulta;
  7. Si el servidor ejecutó previamente la consulta, es posible que el plan de ejecución aún esté en la caché de consultas. De lo contrario, se debe crear un nuevo plan;
  8. El servidor ejecuta la consulta tal como se indica y devuelve un resultado al cliente;
  9. Ese resultado contendrá un búfer de filas que depende de la implementación. Pueden ser 100 filas o más o menos. Se devuelven todas las columnas para cada fila;
  10. A medida que obtenga más filas, eventualmente el cliente le pedirá al servidor más filas. Esto puede ser cuando se agota el cliente o puede hacerse de forma preventiva. De nuevo, esto depende de la implementación.

La idea de todo esto es minimizar los viajes de ida y vuelta al servidor sin devolver demasiado datos innecesarios, por lo que si solicita un millón de filas, no las obtendrá todas a la vez.

Las cláusulas LIMIT, o cualquier cláusula de hecho, modificarán el conjunto de resultados.

Por último, (7) es importante porque SELECT * FROM table WHERE a = 'foo' y SELECT * FROM table WHERE a = 'bar' son dos consultas diferentes en lo que respecta al optimizador de base de datos, por lo que se debe determinar un plan de ejecución para cada una por separado. Pero una consulta parametrizada (SELECT * FROM table WHERE a = :param ) con diferentes parámetros es una consulta y solo debe planificarse una vez (al menos hasta que se caiga de la caché de consultas).