Red de conocimiento informático - Aprendizaje de programación - Cómo mejorar la eficiencia operativa del proyecto en el desarrollo de software PHP

Cómo mejorar la eficiencia operativa del proyecto en el desarrollo de software PHP

Cómo mejorar la eficiencia de la operación del proyecto en el desarrollo de software PHP

¿Cómo mejorar la eficiencia de la ejecución del programa PHP? Análisis de los hábitos de programación. El programa PHP es originalmente un lenguaje de programación interpretado y su velocidad de ejecución no es alta. Si no presta atención a los hábitos de programación en el desarrollo diario, será difícil mejorar su eficiencia de ejecución. de los dos aspectos de la programación PHP y la eficiencia de los datos mysql ¿Cuáles son los puntos clave para mejorar su eficiencia de ejecución? ¿Cómo mejorar la eficiencia operativa del proyecto en el desarrollo de software PHP?

1. eficiencia de PHP

1. Si el método de clase se puede definir como estático, intente definirlo como estático y su velocidad aumentará casi 4 veces.

2. La velocidad de $row['id'] es 7 veces mayor que la de $row[id].

3. Echo es más rápido que imprimir y utiliza múltiples parámetros de echo (anotación: se refiere al uso de comas en lugar de puntos) en lugar de concatenación de cadenas, como echo $str1, $str2.

4. Determine el número máximo de bucles antes de ejecutar el bucle for. No calcule el valor máximo en cada bucle. Es mejor utilizar foreach.

5. Anule el registro de variables no utilizadas, especialmente matrices grandes, para liberar memoria.

6. Intenta evitar el uso de __get, __set, __autoload.

7. require_once() es caro.

8. Intente utilizar rutas absolutas al incluir archivos, ya que evita la velocidad de PHP al buscar archivos en include_path y el tiempo necesario para analizar la ruta del sistema operativo será menor.

9. Si desea saber la hora en que el script comienza a ejecutarse (anotación: el servidor recibe la solicitud del cliente), es mejor usar $_SERVER['REQUEST_TIME'] que time().

10. Las funciones reemplazan las expresiones regulares para completar la misma función.

11. La función str_replace es más rápida que la función preg_replace, pero la función strtr es cuatro veces más eficiente que la función str_replace.

12. Si una función de reemplazo de cadena puede aceptar matrices o caracteres como parámetros y la longitud del parámetro no es demasiado larga, puede considerar escribir un código de reemplazo adicional para que cada parámetro pasado sea un carácter, y más bien que simplemente escribir una línea de código que acepte matrices como parámetros para consultar y reemplazar.

13. Es mejor usar una declaración de rama selectiva (anotación de traducción: cambiar caso) que usar múltiples declaraciones if, else if.

14. Usar @ para bloquear mensajes de error es muy ineficiente y extremadamente ineficiente.

15. Abrir el módulo mod_deflate de Apache puede mejorar la velocidad de navegación de las páginas web.

16. La conexión a la base de datos debe cerrarse al terminar de usarla y no utilizar conexiones largas.

17. Los mensajes de error son caros.

18. Incrementar variables locales en los métodos es lo más rápido. Casi tan rápido como llamar a variables locales en una función.

19. Incrementar una variable global es 2 veces más lento que incrementar una variable local.

20. Incrementar una propiedad de objeto (como: $this->prop++) es 3 veces más lento que incrementar una variable local.

2. Puntos clave para mejorar la eficiencia de ejecución de los datos MYSQL

1. ¿Optimizar su consulta para el caché de consultas?

La mayoría de los servidores MySQL tienen habilitado el caché de consultas. Esta es una de las formas más efectivas de mejorar el rendimiento y la maneja el motor de base de datos MySQL. Cuando muchas de las mismas consultas se ejecutan varias veces, los resultados de la consulta se colocarán en un caché, de modo que las consultas idénticas posteriores no necesiten operar la tabla sino acceder directamente a los resultados almacenados en caché. ?

El principal problema aquí es que para los programadores, este asunto se pasa por alto fácilmente. Porque algunas de nuestras declaraciones de consulta harán que MySQL no use el caché.

Consulte el siguiente ejemplo:?

// La caché de consultas no está habilitada $r = mysql_query("SELECT nombre de usuario DEL usuario DONDE signup_date >= CURDATE()"); Habilítelo Consultar caché $today = date("Y-m-d");

$r = mysql_query("SELECT nombre de usuario DEL usuario DONDE signup_date >= '$today'"); Los dos anteriores La diferencia entre las declaraciones SQL es que CURDATE () el caché de consultas de MySQL no funciona en esta función. Por lo tanto, funciones SQL como NOW() y RAND() u otras funciones similares no habilitarán el almacenamiento en caché de consultas porque los retornos de estas funciones son volátiles. Entonces, todo lo que necesitas es reemplazar la función MySQL con una variable para habilitar el almacenamiento en caché. ?

2. ¿EXPLICAR tu consulta SELECT?

El uso de la palabra clave EXPLAIN puede permitirte saber cómo MySQL maneja tu declaración SQL. Esto puede ayudarle a analizar los cuellos de botella en el rendimiento de sus declaraciones de consulta o estructuras de tablas. ?

Los resultados de la consulta de EXPLAIN también le indicarán cómo se utiliza su clave principal de índice, cómo se busca y clasifica su tabla de datos... etc., etc. ?

Elija una de sus declaraciones SELECT (se recomienda elegir la más compleja con múltiples conexiones de tablas) y agregue la palabra clave EXPLAIN al frente. Puedes usar phpmyadmin para hacer esto. Luego, verá un formulario. En el siguiente ejemplo, olvidamos agregar el índice group_id y unir una tabla:

Cuando agregamos un índice al campo group_id:

Cuando solo hay una fila. de datos ¿Utiliza LÍMITE 1?

A veces, cuando consulta una tabla, ya sabe que el resultado será solo un resultado, pero es posible que necesite recuperar el cursor o que desee verificar el número. de registros devueltos. ?

En este caso, agregar LIMIT 1 puede aumentar el rendimiento. De esta manera, el motor de base de datos MySQL dejará de buscar después de encontrar un dato, en lugar de continuar buscando el siguiente dato que coincida con el registro. ?

El siguiente ejemplo es sólo para descubrir si hay usuarios "chinos". Obviamente, el último será más eficiente que el primero. (Tenga en cuenta que el primero es Seleccionar * y el segundo es Seleccionar 1).

Podemos ver que el primer resultado muestra que se buscaron 7883 filas, mientras que el último solo buscó dos tablas. Líneas 9 y 16. Mirar la columna de filas nos permite encontrar posibles problemas de rendimiento. ?

// Ineficiente: $r = mysql_query("SELECT * FROM usuario WHERE país = 'China'"); if (mysql_num_rows($r) > 0) {

// ... }

// Eficiente: $r = mysql_query("SELECCIONE 1 DEL usuario DONDE país = 'China' LIMIT 1");

if (mysql_num_rows($r) > 0) {

// ... }

4. ¿Indexar el campo de búsqueda?

Los índices son no necesariamente para claves primarias o campos únicos. Si hay un campo en su tabla que siempre utilizará para las búsquedas, cree un índice para él.

En la imagen de arriba, puede ver la cadena de búsqueda "apellido LIKE 'a%'". Uno está indexado y el otro no. El rendimiento es aproximadamente 4 veces peor.

?

Además, también deberías necesitar saber qué tipo de búsquedas no pueden utilizar índices normales. Por ejemplo, cuando necesita buscar una palabra en un artículo extenso, como: "DONDE post_content COMO '%apple%'", es posible que el índice no tenga sentido. ¿Es posible que necesite utilizar el índice de texto completo de MySQL o crear un índice usted mismo (por ejemplo: buscar palabras clave o etiquetas)?

5. ¿Utilizar tipos de ejemplos equivalentes al unir tablas y agregarlos al índice?

Si su aplicación tiene muchas consultas JOIN, debe asegurarse de que los campos Join en ambas tablas estén indexados. De esta manera, MySQL iniciará un mecanismo interno para optimizar la declaración Join SQL para usted. ?

Además, los campos utilizados para Unirse deben ser del mismo tipo. Por ejemplo: si unes un campo DECIMAL con un campo INT, MySQL no puede usar sus índices. Para esos tipos STRING, también deben tener el mismo conjunto de caracteres. (¿Los juegos de caracteres de las dos tablas pueden ser diferentes)?

// Buscar empresa en el estado $r = mysql_query("SELECT company_name FROM users

LEFT JOIN Companies ON (users . estado = empresas.estado)

WHERE usuarios.id = $user_id");

// Los dos campos de estado deben estar indexados y deben ser de tipo equivalente, el mismo conjunto de caracteres.

6. ¿Nunca ORDENAR POR RAND()?

¿Quiere alterar las filas de datos devueltas? ¿Elegir un dato al azar? Realmente no sé quién inventó este uso, pero a muchos principiantes les gusta usarlo de esta manera. Pero realmente no comprendes lo terrible que es el problema de rendimiento. ?

Si realmente desea codificar las filas de datos devueltas, tiene N formas de lograr este objetivo. Usar esto sólo hará que el rendimiento de su base de datos caiga exponencialmente. El problema aquí es que MySQL tendrá que ejecutar la función RAND() (que consume tiempo de CPU), y esto es para registrar las filas para cada fila de registros y luego ordenarlas. Incluso si usa el Límite 1, ¿no ayudará (porque es necesario ordenarlo)?

¿El siguiente ejemplo selecciona aleatoriamente un registro?

// Nunca hagas esto: $ r = mysql_query ("SELECCIONAR nombre de usuario DEL usuario ORDER BY RAND() LIMIT 1");

// Esto sería mejor: $r = mysql_query("SELECCIONAR recuento (*) DEL usuario"); /p >

$d = mysql_fetch_row($r);

$rand = mt_rand(0,$d[0] - 1);

$r = mysql_query( "SELECT nombre de usuario FROM usuario LIMIT $rand, 1");

7. ¿Evitar SELECT *?

Cuantos más datos se lean de la base de datos, más lenta será la consulta. Además, si su servidor de base de datos y su servidor WEB son dos servidores independientes, esto también aumentará la carga de transmisión de la red. ?

Por lo tanto, debes desarrollar el buen hábito de tomar lo que necesites.

?

// No recomendado $r = mysql_query("SELECT * FROM user WHERE user_id = 1");

$d = mysql_fetch_assoc($r); p>echo "Bienvenido {$d['nombre de usuario']}";

// Recomendado $r = mysql_query("SELECCIONE el nombre de usuario DEL usuario DONDE user_id = 1"); $d = mysql_fetch_assoc($r);

echo "Bienvenido {$d['username']}";

8. ¿Establecer siempre un ID para cada tabla?

Debemos establecer una ID como clave principal para cada tabla en la base de datos, y la mejor es un tipo INT (se recomienda UNSIGNED), y configurar el indicador AUTO_INCREMENT que aumenta automáticamente. ?

Incluso si su tabla de usuarios tiene un campo con una clave principal llamada "correo electrónico", no la convierta en la clave principal. El uso del tipo VARCHAR como clave principal degradará el rendimiento. Además, en su programa, debe usar ID de tabla para construir sus estructuras de datos. ?

Además, bajo el motor de datos MySQL, hay algunas operaciones que requieren el uso de claves primarias. En estos casos, el rendimiento y la configuración de las claves primarias se vuelven muy importantes, como los clústeres y las particiones. ..?

Aquí, sólo hay una excepción, y es la "clave externa" de la "tabla asociada". Es decir, la clave primaria de esta tabla está compuesta por las claves primarias. de varias mesas individuales. A esta situación la llamamos "clave externa". Por ejemplo: hay una "tabla de estudiantes" con ID de estudiantes y una "tabla de plan de estudios" con ID de cursos. Luego, la "tabla de calificaciones" es una "tabla de asociación", que asocia la tabla de estudiantes y la tabla de cursos. tabla, la identificación del estudiante y la identificación del curso se denominan "claves externas" y ambas forman la clave principal. ?

9. ¿Usar ENUM en lugar de VARCHAR?

El tipo ENUM es muy rápido y compacto. De hecho, contiene un TINYINT, pero aparece como una cadena. De esta manera, resulta bastante perfecto utilizar este campo para hacer algunas listas de opciones. ?

Si tiene un campo, como "género", "país", "etnia", "estado" o "departamento", y sabe que los valores de estos campos son limitados y arreglado, entonces, debes usar ENUM en lugar de VARCHAR. ?

MySQL también tiene una "sugerencia" (ver punto 10) que le indica cómo reorganizar la estructura de su tabla. Cuando tiene un campo VARCHAR, este consejo le indica que lo cambie a un tipo ENUM. Usando PROCEDURE ANALYSE() puede obtener sugerencias relevantes. ?

10. ¿Obtener consejos de PROCEDURE ANALYSE()?

PROCEDURE ANALYSE() permitirá que MySQL le ayude a analizar sus campos y sus datos reales, y le dará algunos consejos útiles. Estas sugerencias sólo serán útiles si hay datos reales en la tabla, porque tomar algunas decisiones importantes requiere datos como base. ?

Por ejemplo, si crea un campo INT como su clave principal, pero no hay muchos datos, entonces PROCEDURE ANALYSE() le sugerirá que cambie el tipo de este campo a MEDIUMINT. O si está utilizando un campo VARCHAR, es posible que reciba una sugerencia para cambiarlo a ENUM porque no hay muchos datos. Todas estas sugerencias son posibles porque no hay suficientes datos, por lo que la toma de decisiones no es lo suficientemente precisa. ?

En phpmyadmin, puede hacer clic en "Proponer estructura de tabla" cuando vea la tabla para ver estas sugerencias.

Asegúrese de tener en cuenta que estas son solo sugerencias a medida que haya más datos disponibles. estas recomendaciones serán más precisas.

Recuerda siempre que eres tú quien finalmente toma la decisión. ?

11. ¿Usar NOT NULL siempre que sea posible?

A menos que tenga una razón muy específica para usar valores NULL, siempre debe mantener sus campos NOT NULL. Esto puede parecer un poco controvertido, sigue leyendo. ?

Primero, pregúntese cuál es la diferencia entre "Vacío" y "NULL" (en el caso de INT, es decir, 0 y NULL). Si cree que no hay diferencia entre ellos, no debe utilizar NULL. (¿Sabías que en Oracle, las cadenas NULL y vacías son lo mismo?).

No creas que NULL no requiere espacio, requiere espacio adicional y, cuando compares, tu programa será más complejo. Por supuesto, esto no significa que no puedas usar NULL. La realidad es muy complicada y todavía habrá situaciones en las que necesitarás usar valores NULL. ?

Lo siguiente está tomado de la propia documentación de MySQL: ?

“Las columnas NULL requieren espacio adicional en la fila para registrar si sus valores son NULL. Para las tablas MyISAM, cada NULL. La columna requiere un bit extra, redondeado al byte más cercano."?

12. ¿Declaraciones preparadas?

Las declaraciones preparadas son muy parecidas a los procedimientos almacenados. Son una colección de declaraciones SQL que ejecutar en segundo plano. Podemos obtener muchos beneficios al utilizar declaraciones preparadas, ya sea por un problema de rendimiento o de seguridad. ?

Las declaraciones preparadas pueden verificar algunas variables que ha vinculado, lo que puede proteger su programa de ataques de "inyección SQL". Por supuesto, también puede verificar manualmente sus variables. Sin embargo, las comprobaciones manuales son propensas a causar problemas y los programadores a menudo las olvidan. Cuando usemos algún framework u ORM, este problema mejorará. ?

En términos de rendimiento, esto puede brindarle considerables ventajas de rendimiento cuando la misma consulta se utiliza varias veces. Puede definir algunos parámetros para estas declaraciones preparadas y MySQL solo las analizará una vez. ?

Aunque la última versión de MySQL utiliza formato binario al transmitir declaraciones preparadas, esto hará que la transmisión de red sea muy eficiente. ?

Por supuesto, hay algunos casos en los que debemos evitar el uso de declaraciones preparadas porque no admiten el almacenamiento en caché de consultas. Pero se dice que es compatible después de la versión 5.1.

?

Para usar declaraciones preparadas en PHP, puede consultar su manual: extensión mysqli o usar una capa de abstracción de base de datos, como: PDO.?

// Crear declaración preparada if ( $stmt = $mysqli->prepare("SELECCIONAR nombre de usuario DEL usuario DONDE estado=?")) {

// Parámetro de enlace $stmt->bind_param("s", $estado < /p); >

// Ejecutar $stmt->execute();

// Resultado del enlace $stmt->bind_result($nombre de usuario);

// Mover el cursor $stmt- >fetch();

printf("%s es de %s

", $nombre de usuario, $estado

$stmt- >close( );

}

13. ¿Consultas sin búfer?

Normalmente, cuando ejecuta su script cuando se emite una declaración SQL, su programa se detendrá allí hasta que no se devuelven más declaraciones SQL y luego su programa continuará ejecutándose. Puede utilizar consultas sin búfer para cambiar este comportamiento. ?

Hay una muy buena explicación sobre esto en la documentación de PHP: función mysql_unbuffered_query(): ?

“mysql_unbuffered_query() envía la consulta SQL a MySQL sin buscarla ni almacenarla automáticamente las filas de resultados como lo hace mysql_query(). Esto ahorra una cantidad considerable de memoria con consultas SQL que producen grandes conjuntos de resultados, y puede comenzar a trabajar en el conjunto de resultados inmediatamente después de que se haya recuperado la primera fila, ya que no tiene que esperar. hasta que se haya realizado la consulta SQL completa."?

La traducción de la oración anterior significa que mysql_unbuffered_query() envía una declaración SQL a MySQL y no busca automáticamente como mysql_query() ni almacena en caché los resultados. Esto ahorrará una cantidad considerable de memoria, especialmente para consultas que generan una gran cantidad de resultados, y no necesita esperar hasta que se devuelvan todos los resultados. Solo necesita devolver la primera fila de datos y podrá comenzar a trabajar. inmediatamente. Los resultados de la consulta están arriba. ?

Sin embargo, esto tiene algunas limitaciones. Porque necesita leer todas las filas o llamar a mysql_free_result() para borrar los resultados antes de la siguiente consulta. Además, mysql_num_rows() o mysql_data_seek() no funcionarán. Por lo tanto, debe considerar detenidamente si desea utilizar consultas sin búfer. ?

14. ¿Guardar la dirección IP como UNSIGNED INT?

Muchos programadores crearán un campo VARCHAR(15) para almacenar la IP en forma de cadena en lugar de la IP entera. Si usa un número entero para almacenarlo, solo necesitará 4 bytes y puede tener campos de longitud fija.

Además, esto le brindará ventajas en las consultas, especialmente cuando necesite utilizar condiciones WHERE como esta: IP entre ip1 e ip2. ?

Debemos usar UNSIGNED INT porque la dirección IP usa el entero entero sin signo de 32 bits. ?

Para su consulta, puede usar INET_ATON() para convertir una IP de cadena en un número entero, e INET_NTOA() para convertir un número entero en una IP de cadena. En PHP, también existen funciones ip2long() y long2ip(). ?

1 $r = "ACTUALIZAR usuarios SET ip = INET_ATON('{$_SERVER['REMOTE_ADDR']}') WHERE user_id = $user_id";?

15. ¿Las tablas más largas serán más rápidas?

Si todos los campos de la tabla son de "longitud fija", toda la tabla se considera "estática" o de "longitud fija". Por ejemplo, no hay campos de los siguientes tipos en la tabla: VARCHAR, TEXTO, BLOB. Siempre que incluya uno de estos campos, la tabla ya no será una "tabla estática de longitud fija" y el motor MySQL la procesará de otra manera. ?

Las tablas de longitud fija mejorarán el rendimiento porque MySQL buscará más rápido, ya que estas longitudes fijas facilitan el cálculo del desplazamiento de los siguientes datos, por lo que la lectura será naturalmente rápida. Y si el campo no tiene una longitud fija, cada vez que desee encontrar el siguiente, el programa deberá encontrar la clave principal. ?

Además, las tablas de longitud fija son más fáciles de almacenar en caché y reconstruir. Sin embargo, el único efecto secundario es que los campos de longitud fija desperdician algo de espacio, porque los campos de longitud fija requieren mucho espacio independientemente de si los usa o no. ?

Utilizando la técnica de "división vertical" (ver siguiente elemento), puedes dividir tu mesa en dos, una con una longitud fija y otra con una longitud variable. ?

16. ¿División vertical?

La “división vertical” es un método para convertir una tabla en una base de datos en varias tablas por columnas, lo que puede reducir la complejidad y la complejidad de la tabla. El número de campos para lograr propósitos de optimización. (En el pasado, trabajé en proyectos en un banco y vi una tabla con más de 100 campos. ¿Me dio miedo)?

Ejemplo 1: hay un campo en la tabla Usuarios que es la dirección de casa. Este campo es opcional. En comparación, a excepción de la información personal cuando opera en la base de datos, no necesita leer ni reescribir este campo con frecuencia. Entonces, ¿por qué no ponerlo en otra mesa? Esto le dará a su tabla un mejor rendimiento. Piénselo, muchas veces, para la tabla de usuarios, solo se usará con frecuencia el ID de usuario, el nombre de usuario, la contraseña, la función de usuario, etc. Las mesas más pequeñas siempre tendrán mejor rendimiento. ?

Ejemplo 2: Tiene un campo llamado "last_login" que se actualiza cada vez que el usuario inicia sesión. Sin embargo, cada actualización hará que se borre la caché de consultas de la tabla. Por lo tanto, puede colocar este campo en otra tabla, de modo que no afecte su lectura continua de ID de usuario, nombre de usuario y rol de usuario, porque la caché de consultas le ayudará a aumentar mucho el rendimiento. ?

Además, debe prestar atención al hecho de que no unirá las tablas formadas por estos campos separados con frecuencia, de lo contrario, el rendimiento será peor que sin dividir. ser una caída extrema. ?

17. ¿Dividir una declaración DELETE o INSERT grande?

Si necesita ejecutar una consulta DELETE o INSERT grande en un sitio web en línea, debe tener mucho cuidado. acciones que hacen que todo su sitio web deje de responder. Debido a que estas dos operaciones bloquearán la tabla, una vez que la tabla esté bloqueada, no podrán ingresar otras operaciones. ?

Apache tendrá muchos procesos o subprocesos secundarios. Por lo tanto, funciona de manera bastante eficiente y nuestro servidor no quiere tener demasiados procesos secundarios, subprocesos y enlaces de bases de datos. Esto consume muchos recursos del servidor, especialmente memoria.

?

Si bloquea su tabla por un período de tiempo, como 30 segundos, entonces, para un sitio con una gran cantidad de visitas, los procesos/hilos de acceso y los enlaces de bases de datos acumulados en estos 30 segundos, La cantidad de archivos abiertos no solo puede causar que su servicio WEB falle, sino que también puede hacer que todo su servidor se cuelgue inmediatamente. ?

Entonces, si tiene un proceso grande y está seguro de dividirlo, usar la condición LIMIT es una buena manera de hacerlo. El siguiente es un ejemplo:

while (1) {

//Only do 1000 mysql_query("BORRAR DE los registros DONDE log_date <= '2009-11-01' LIMIT 1000" );

if (mysql_affected_rows() == 0) {

//No más opciones para eliminar, ¡sal! break;

}

// Tómate un descanso cada vez que usleep(50000);

}

18. ¿La columna será más rápida?

Para la mayoría de los motores de bases de datos, las operaciones del disco duro son probablemente el cuello de botella más importante. Por lo tanto, hacer que sus datos sean compactos puede resultar muy útil en esta situación porque reduce el acceso al disco duro. ?

Consulte la documentación de MySQL Requisitos de almacenamiento para ver todos los tipos de datos. ?

Si una tabla solo tiene unas pocas columnas (como una tabla de diccionario, una tabla de configuración), entonces no tenemos ninguna razón para usar INT como clave principal. Usar MEDIUMINT, SMALLINT o un TINYINT más pequeño será Más. económico. Si no necesita realizar un seguimiento del tiempo, es mucho mejor usar DATE que DATETIME. ?

Por supuesto, también debe dejar suficiente espacio para la expansión. De lo contrario, si hace esto en el futuro, morirá feo. Consulte el ejemplo de Slashdot (06 de noviembre de 2009), a The. La simple declaración ALTER TABLE tomó más de 3 horas porque contenía 16 millones de datos. ?

19. ¿Elegir el motor de almacenamiento adecuado?

Hay dos motores de almacenamiento en MySQL, MyISAM e InnoDB. Cada motor tiene ventajas y desventajas. El artículo anterior de Cool Shell "MySQL: ¿InnoDB o MyISAM?" analizó este asunto. ?

MyISAM es adecuado para algunas aplicaciones que requieren una gran cantidad de consultas, pero no es muy bueno para una gran cantidad de operaciones de escritura. Incluso si solo necesita actualizar un campo, toda la tabla se bloqueará y otros procesos, incluso el proceso de lectura, no podrán funcionar hasta que se complete la operación de lectura. Además, MyISAM es extremadamente rápido para cálculos como SELECT COUNT(*). ?

La tendencia de InnoDB será un motor de almacenamiento muy complejo y, para algunas aplicaciones pequeñas, será más lento que MyISAM. La otra razón es que admite el "bloqueo de filas", por lo que será mejor cuando haya más operaciones de escritura. Además, también admite aplicaciones más avanzadas, como transacciones. ?

¿El siguiente es el manual de MySQL?

* target=”_blank”¿Motor de almacenamiento MyISAM?

* ¿Motor de almacenamiento InnoDB?

20. ¿Usando un Mapeador Relacional de Objetos?

Usando un ORM (Mapeador Relacional de Objetos), puede obtener aumentos de rendimiento confiables. Todo lo que puede hacer un ORM también se puede escribir manualmente. Sin embargo, esto requiere un experto de alto nivel. ?

Lo más importante de ORM es la "Lazy Loading", es decir, sólo se realizará cuando sea necesario obtener el valor. Pero también hay que tener cuidado con los efectos secundarios de este mecanismo, porque es probable que reduzca el rendimiento al crear muchas, muchas consultas pequeñas.

?

ORM también puede empaquetar sus declaraciones SQL en una transacción, lo cual es mucho más rápido que ejecutarlas individualmente. ?