2010-01-15 39 views
6
estructura

Base de datos:consultas MySQL vs php foreach múltiple bucles

id galleryId     type  file_name  description 
1 `artists_2010-01-15_7c1ec` `image` `band602.jpg` `Red Umbrella Promo` 
2 `artists_2010-01-15_7c1ec` `image` `nov7.jpg`  `CD Release Party` 
3 `artists_2010-01-15_7c1ec` `video` `band.flv`  `Presskit` 

Voy a tirar de imágenes por una sección de una aplicación, videos en otro, etc. ¿Es mejor hacer múltiples MySQL consultas para cada sección de este modo:

$query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image'); 

... O debería ser la construcción de una matriz asociativa y solo bucle a través de la matriz y otra vez cada vez que necesito para usar el conjunto de resultados?

Gracias por los pensamientos.

Respuesta

8

Depende de lo que es más importante: la legibilidad o el rendimiento. Esperaría una sola consulta y el llenado de matrices PHP sería más rápido de ejecutar, ya que las conexiones de bases de datos son costosas, pero una consulta simple para cada sección es mucho más legible.

A menos que sepa (y no solo espero) que va a obtener una gran cantidad de tráfico me gustaría obtener consultas separadas y luego preocuparse por la optimización si parece que va a ser un problema. En ese punto, habrá otras cosas que querrá hacer de todos modos, como crear una capa de acceso a datos y agregar algo de almacenamiento en caché.

+0

Gracias a todos - este (si es cierto) tiene más sentido para mí, ya que solo habrá un puñado de archivos en cada categoría. Una consulta es. – jay

0

Es mejor tener múltiples consultas. Cada vez que ejecuta una consulta, todos los datos se extraen y se cargan en la memoria. Si tiene 5 tipos diferentes, significa que cada página de ese tipo está cargando 5 veces más datos que los que necesita.

Incluso con solo uno a la vez, es probable que desee comenzar a paginar con consultas LIMIT/OFFSET bastante rápido si tiene más de 100 o la cantidad que razonablemente puede mostrar en una página a la vez.

2

Si por "secciones" se entiende páginas individuales separadas (solicitudes HTTP separadas) que los usuarios pueden ver, sugeriría la consulta por tipo según sea necesario. Si en una página donde solo hay conjuntos de datos de imágenes, realmente no necesita buscar el conjunto de datos de video, por ejemplo. No ahorrará mucho tiempo obteniendo todo, ya que se conectará a la base de datos para cada página afectada (supongo).

Si por "secciones" quiere decir diferentes partes de una página, busque todo En seguida. Esto le ahorrará tiempo en consultas (solo una consulta).

Pero dependiendo del tamaño de su conjunto de datos, podría tener problemas con el límite de memoria de PHP al consultar todo. A continuación, puede tratar de aumentar el límite de la memoria, pero si eso falla, es probable que deba recurrir a la consulta por tipo.

El uso del método de consulta por tipo traslada parte de la carga de cálculo al servidor de la base de datos, ya que solo solicitará y obtendrá lo que realmente necesita. Y no tiene que escribir código para filtrar y ordenar sus resultados. El filtrado y la clasificación es algo que la base de datos es generalmente mejor que el código PHP. Si es posible, habilite el caché de consultas de MySQL, que acelerará estas consultas mucho más que cualquier cosa que pueda escribir en PHP.

1

Si todos sus datos provienen de una sola tabla, solo haré una consulta.

Supongo que está compilando una sola página con una sección para imágenes, una sección para video, una sección para música, etc. Escriba los resultados de la búsqueda ordenados por tipo de medio - repita a través de todas las imágenes, luego todo el video , luego toda la música.