⊗ppSpOtSQ 80 of 83 menu

Optimización del uso de consultas SQL en PHP

Ejecutar consultas SQL en una base de datos es una operación muy lenta. Por lo tanto, debemos intentar minimizar la cantidad de consultas a la base de datos.

El error más común es ejecutar múltiples consultas SQL en un bucle, cuando existen consultas alternativas que permiten lograr el objetivo con un solo comando.

Veamos un ejemplo.

Supongamos que tenemos un array con id de registros en la base de datos y necesitamos eliminar los registros con esos id.

Sin pensarlo mucho, se podría escribir la siguiente "maravillosa" construcción:

<?php $ids = [1, 2, 3, 4, 5]; // array para eliminar foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

El problema de este código es que se ejecutan múltiples consultas en el bucle. Imagine que el array tenga 100 elementos - ¡se ejecutarán 100 consultas a la base de datos!

La trampa particular de la tarea descrita es que durante el desarrollo del sitio la base de datos es pequeña y las consultas se ejecutan muy rápido. Sin embargo, a medida que el sitio funciona en el hosting, la base de datos crecerá, las consultas se ejecutarán cada vez más lentamente, ¡y puede llegar al punto en que, debido a la ejecución de cientos de consultas en un bucle, el sitio tarde más de un minuto en cargar!

Con muy poco esfuerzo, podemos hacer que se ejecute solo una consulta, de la siguiente manera:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // obtenemos la cadena '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Optimice el siguiente código:

<?php $arr = [1, 2, 2, 4, 5]; $res = []; for ($i = 1; $i < count($arr); $i++) { $note = mysqli_query($link, "SELECT * FROM users WHERE id=$id"); for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row); $res[] = $data; } var_dump($res); ?>
Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar