La consulta de la base de datos Mysql es muy lenta, además del índice, ¿qué más puede ser?

He estado usando ctrl c y ctrl v para desarrollar código curd durante muchos años.

¿Por qué la consulta mysql es lenta? Esta pregunta se encuentra a menudo en el desarrollo real, y también es una pregunta de alta frecuencia en las entrevistas.

Cuando nos encontramos con este tipo de problema, generalmente pensamos que se debe al índice.

Además de los índices, ¿qué otros factores pueden ralentizar las consultas de la base de datos?

¿Cuáles son las operaciones que pueden mejorar la capacidad de consulta de mysql?

En el artículo de hoy, hablemos de los escenarios que hacen que las consultas a la base de datos se ralenticen y demos razones y soluciones.

Proceso de consulta de la base de datos

Primero echemos un vistazo al proceso por el que pasará una declaración de consulta.

Por ejemplo, tenemos una tabla de base de datos

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '名字',
  `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
  `gender` int(8) NOT NULL DEFAULT '0' COMMENT '性别',
  PRIMARY KEY (`id`),
  KEY `idx_age` (`age`),
  KEY `idx_gender` (`gender`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

El código de la aplicación que solemos escribir (go o C++) se llama cliente en este momento .

La capa inferior del cliente intentará establecer una conexión TCP larga a MySQL con la contraseña de la cuenta.

El módulo de gestión de conexiones de mysql gestionará esta conexión.

Una vez establecida la conexión, el cliente ejecuta una declaración SQL de consulta. por ejemplo:

select * from user where gender = 1 and age = 100;

El cliente conectará la instrucción sql a mysql a través de la red.

Después de que mysql recibe la instrucción sql, primero juzgará si la instrucción SQL tiene errores gramaticales en el analizadorl , como select.Si se escribe y escribe uno menos slect, se informará un error You have an error in your SQL syntax;. Se puede decir que este error es muy familiar para una parte discapacitada como yo.

El siguiente es el optimizador , donde elegirá qué índice usar de acuerdo con ciertas reglas .

Después de eso, la función de interfaz del motor de almacenamiento se llama a través del ejecutor .

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-1bu3qtIz-1649810228829) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK30llfbC5U0KXGE0qjeVnLPkiclPicZMGSxr6G “ Arquitectura MysqlAbsql” )]

esquema mysql

El motor de almacenamiento es similar a cada componente. Es donde mysql realmente obtiene datos fila por fila y los devuelve. El motor de almacenamiento se puede reemplazar y cambiar, ya sea con MyISAM, que no admite transacciones, o Innodb, que admite actas. Esto se puede especificar al crear la tabla. por ejemplo

CREATE TABLE `user` (
  ...
) ENGINE=InnoDB;

El más utilizado ahora es InnoDB .

Centrémonos en esto.

En InnoDB, debido a que es lento operar el disco directamente, se agrega una capa de memoria para acelerar la velocidad, llamada grupo de búfer.Allí, se colocan muchas páginas de memoria, cada página es de 16 KB, y algunas páginas de memoria se colocan en el tabla de base de datos Ese tipo de datos línea por línea, y algunos son información de índice.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-mPGVDcTZ-1649810228830) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3AicuSMsppX9uxkibXsNicTMzsOeTib1AZTMdmQpic .cn / mmbiz_png / AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3AicuSMsppX9uxkibXsNicTMzsOeTib1AZTMdmQpic.cn / mmbiz_png / AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3AicuSMsppX9uxkibXsNicTMzsOeTib1AZTMdmQPoolgIUgj640XuiavMb1AZTMdmQPoolgjbuff / disk640XuiavM “)]

bufferPool y disco

Consulta SQL en InnoDB. De acuerdo con el índice calculado en el optimizador anterior, se consultará la página de índice correspondiente y, si no está en el grupo de búfer, la página de índice se cargará desde el disco. Luego acelere la consulta a través de la página de índice para obtener la ubicación específica de la página de datos. Si estas páginas de datos no están en el grupo de búfer, se cargan desde el disco.

De esta manera obtenemos los datos fila por fila que queremos.

[Falló la transferencia de imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-d8FzorXD-1649810228830) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3j17LhKgzqicwf /KNrQjPff37PPhlo4yf64zvhc2Y índice y página “OYAot6hgwtyU0” relación de página de disco")]

La relación entre las páginas de índice y las páginas de disco

Finalmente, el resultado de los datos obtenidos se devuelve al cliente.

Análisis de consultas lentas

Si el proceso anterior es lento, podemos profilingver dónde es lento el proceso encendiéndolo.

mysql> set profiling=ON;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | ON    |
+---------------+-------+
1 row in set (0.00 sec)

Luego ejecute la instrucción sql normalmente.

Se registrará el tiempo de ejecución de estas sentencias SQL. En este momento, desea comprobar qué sentencias se han grabado y se pueden ejecutar.show profiles;

mysql> show profiles;
+----------+------------+---------------------------------------------------+
| Query_ID | Duration   | Query                                             |
+----------+------------+---------------------------------------------------+
|        1 | 0.06811025 | select * from user where age>=60                  |
|        2 | 0.00151375 | select * from user where gender = 2 and age = 80  |
|        3 | 0.00230425 | select * from user where gender = 2 and age = 60  |
|        4 | 0.00070400 | select * from user where gender = 2 and age = 100 |
|        5 | 0.07797650 | select * from user where age!=60                  |
+----------+------------+---------------------------------------------------+
5 rows in set, 1 warning (0.00 sec)

Preste atención a lo anterior query_id, por ejemplo, select * from user where age>=60el query_id correspondiente es 1. Si desea verificar el tiempo específico de esta declaración SQL, puede ejecutar el siguiente comando.

mysql> show profile for query 1;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000074 |
| checking permissions | 0.000010 |
| Opening tables       | 0.000034 |
| init                 | 0.000032 |
| System lock          | 0.000027 |
| optimizing           | 0.000020 |
| statistics           | 0.000058 |
| preparing            | 0.000018 |
| executing            | 0.000013 |
| Sending data         | 0.067701 |
| end                  | 0.000021 |
| query end            | 0.000015 |
| closing tables       | 0.000014 |
| freeing items        | 0.000047 |
| cleaning up          | 0.000027 |
+----------------------+----------+
15 rows in set, 1 warning (0.00 sec)

A través de los elementos anteriores, puede ver dónde se gasta el tiempo específico. Por ejemplo, de lo anterior se puede ver que el envío de datos toma más tiempo. Esto se refiere al tiempo que le toma al ejecutor comenzar a consultar datos y enviar los datos al cliente. Porque mi tabla tiene decenas de miles de datos elegibles. , por lo que este bloque El más lento, pero también en línea con las expectativas.

En circunstancias normales, en nuestro proceso de desarrollo, la mayor parte del tiempo está en la Sending dataetapa, y si es lento en esta etapa, la razón más probable está relacionada con el índice.

Razones relacionadas con el índice

Los problemas relacionados con el índice generalmente se pueden analizar con el comando de explicación. Puede ver qué índices se utilizan y cuántas filas se escanearán .

MySQL verá qué índice elegir en la etapa de optimización y la velocidad de consulta será más rápida.

Generalmente se consideran varios factores, tales como:

  • Cuántas filas escanear para seleccionar este índice

  • ¿Cuántas páginas de 16 kb deben leerse para obtener estas líneas?

  • El índice común debe devolverse a la tabla, pero el índice de clave principal no es necesario. ¿ Cuesta mucho la tabla de retorno ?

Volviendo a la instrucción sql mencionada en show profile, usémosla para explain select * from user where age>=60analizarla.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-mbG9ch1m-1649810228831) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK384CyKs22B0E3ORxicOAnq0mFeFaFaCENvCWHSlVdnexqRE9G9x4) ” )]

explicar sql

La declaración anterior usa typeALL, lo que significa un escaneo completo de la tabla , possible_keysque se refiere al índice que se puede usar. El índice que se puede usar aquí es un índice común creado para la antigüedad, pero el índice que usa la base de datos está realmente keyallí. Uno columna, sí NULL. Es decir, este sql no usa el índice, sino un escaneo completo de la tabla .

Esto se debe a que hay demasiadas filas de datos elegibles ( rows) en la tabla de datos. Si se usa el índice de edad, entonces deben leerse del índice de edad, y el índice de edad es un índice común , y es necesario ir Vuelva a la tabla para clave principalencontrar la la página de datos correspondiente . Después de todo, es mejor ir directamente a la clave principal. Así que finalmente elegí un escaneo completo de la tabla.

Por supuesto, lo anterior es solo un ejemplo. De hecho, cuando mysql ejecuta sql, a menudo sucede que no se usa ningún índice o el índice utilizado no cumple con nuestras expectativas . Hay muchos escenarios de falla de índice, como usar un signo de desigualdad , conversión implícita , etc., esto creo que lo has memorizado mucho cuando recitas el ensayo de ocho patas, y no lo voy a repetir.

Hablemos de dos problemas que son fáciles de encontrar en la producción.

El índice no es el esperado

En el desarrollo real, algunas situaciones son bastante especiales. Por ejemplo, algunas tablas de base de datos tienen una pequeña cantidad de datos y pocos índices al principio. Al ejecutar sql, se utilizan los índices que cumplen con sus expectativas. Pero a medida que pasa el tiempo, más personas se desarrollan, y la cantidad de datos también aumenta, e incluso se pueden agregar algunos otros índices redundantes, y puede haber otros índices que no cumplan con sus expectativas. . Como resultado, la consulta es repentinamente lenta.

Este tipo de problema se puede resolver fácilmente force indexespecificando el índice . por ejemplo

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-q68VFWKP-1649810228831) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3hlnsL9hzg416jtwRJAlWhZEUZU9t index ")]

force index especifica el índice

Se explainpuede ver que después de agregar el índice de fuerza, sql selecciona el índice idx_age.

El índice sigue siendo muy lento.

Algunos sql, explainmirando el comando, obviamente van al índice, pero aún es muy lento. Generalmente hay dos situaciones:

La primera es que la discriminación del índice es demasiado baja. Por ejemplo, el enlace url de la ruta completa de la página web se usa para indexar. A simple vista, todos ellos son el mismo nombre de dominio. Si la longitud del índice del prefijo no es lo suficientemente largo, entonces el índice es seguido por el entero . Similar al escaneo de tablas , la postura correcta es tratar de hacer que el índice sea más distinguible . Por ejemplo, elimine el nombre de dominio y use solo la última parte del URI para indexar .

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-KWoHpJm6-1649810228832) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3EzMC7fictT9d9s3uFBMja0RSd6u9GupRSGdd6uOLmeagruy9 ) demasiado bajo")]

La discriminación del prefijo de índice es demasiado baja

La segunda es que los datos coincidentes en el índice son demasiado grandes. En este momento, debe prestar atención al campo de filas en la explicación.

Se utiliza para estimar el número de filas que necesita comprobar esta declaración de consulta. Puede que no sea del todo exacto, pero puede reflejar un orden de magnitud aproximado.

Cuando es grande, las siguientes situaciones son generalmente comunes.

  • Si este campo tiene un atributo único , como número de teléfono, etc., no debería haber muchas repeticiones, puede ser que la lógica de su código tenga muchas operaciones de inserción repetidas , necesita verificar la lógica del código o necesita agregar un límite de índice único Abajo.

  • Si los datos en este campo son muy grandes, ¿debo obtenerlos todos? Si no es necesario, agregue un limitlímite. Si realmente desea obtenerlos todos, no puede obtenerlos todos a la vez. Hoy en día, tiene una pequeña cantidad de datos y es posible que no esté bajo presión para retirar 10,000 o 20,000 yuanes a la vez. Es posible que deba buscar en lotes . La operación específica es usar la order by idordenación primero y luego tomar un lote de datos 最大idcomo la posición de inicio para la siguiente búsqueda de datos.

muy pocas conexiones

Hemos terminado de hablar de las razones relacionadas con la indexación. Hablemos de qué factores, además de la indexación, limitarán nuestra velocidad de consulta.

Podemos ver que hay una gestión de conexiones en la capa del servidor de mysql , y su función es gestionar la larga conexión entre el cliente y mysql.

En circunstancias normales, si solo hay una conexión entre el cliente y la capa del servidor , después de ejecutar la consulta sql, solo puede bloquear y esperar a que regrese el resultado.Si hay una gran cantidad de solicitudes simultáneas para consultas simultáneas, entonces las solicitudes posteriores deben esperar a que se complete la ejecución de la solicitud anterior para comenzar a ejecutarse.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-HRKK41Rx-1649810228832) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3c9WU7FyGe4jzn3caJWMOJPWOSPWOSPWVlVGE6tXgs803T ” hará que sql se bloquee")]

Muy pocas conexiones harán que sql se bloquee

Por lo tanto, muchas veces nuestras aplicaciones, como go o java, imprimirán el registro de ejecución de sql durante unos minutos, pero de hecho, si ejecuta esta declaración por separado, está en el nivel de milisegundos. Todo esto se debe a que estas declaraciones de SQL están esperando que se complete la ejecución de SQL anterior.

¿Cómo resolverlo?

Si podemos crear algunas conexiones más , las solicitudes se pueden ejecutar al mismo tiempo y las conexiones posteriores no tendrán que esperar tanto.

[Falló la transferencia de imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-AtNj4cqO-1649810228832) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK36d77KUV53ibMkSkLg1b2El8qwjd6ab0ta6 “Se puede agregar una conexión” Acelerar la ejecución de sql")]

Agregar conexiones puede acelerar la ejecución de sql

El problema de que el número de conexiones es demasiado pequeño está limitado tanto por la base de datos como por el cliente .

El número de conexiones a la base de datos es demasiado pequeño.

El número máximo de conexiones de Mysql es predeterminado 100y se puede alcanzar el máximo 16384.

max_connectionsPuede cambiar el número máximo de conexiones a la base de datos configurando los parámetros de mysql .

mysql> set global max_connections= 500;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 500   |
+-----------------+-------+
1 row in set (0.00 sec)

La operación anterior cambió el número máximo de conexiones a 500.

El número de conexiones en el lado de la aplicación es demasiado pequeño

Se ha ajustado el tamaño de la conexión de la base de datos, pero parece que el problema no ha cambiado. ¿O hay muchas ejecuciones de sql que duran unos minutos o incluso se agotan?

Eso puede deberse a que la cantidad de conexiones en el lado de su aplicación (aplicación escrita en go, java, es decir, el cliente de mysql) es demasiado pequeña.

La conexión entre el lado de la aplicación y la capa inferior de mysql es un enlace largo basado en el protocolo TCP , y el protocolo TCP requiere tres protocolos de enlace y cuatro ondas para lograr el establecimiento y la liberación de la conexión. Si restablezco una nueva conexión cada vez que ejecuto sql, me lleva mucho tiempo seguir dándome la mano y saludando con la mano . Por lo tanto, generalmente se establece un grupo de conexiones largo . Una vez que se agota la conexión, se introduce en el grupo de conexiones. La próxima vez que desee ejecutar sql, puede pescar una conexión y usarla, lo cual es muy respetuoso con el medio ambiente. .

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-veZIBdbg-1649810228833) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3HLmE3tERpYBAzmzgpy93vn33lxPool connection principio "Principio de conexión de la piscina" ”)]

Principio del grupo de conexiones

Cuando generalmente escribimos código, operamos la base de datos a través de bibliotecas orm de terceros y bibliotecas orm maduras, el 10 millones por ciento de ellas tendrá un grupo de conexiones.

Y este grupo de conexiones generalmente tiene un tamaño. Este tamaño controla el número máximo de conexiones que puede tener. Si su conjunto de conexiones es demasiado pequeño, no es tan grande como la base de datos, entonces ajustar el número máximo de conexiones a la base de datos no tendrá ningún efecto.

En circunstancias normales, puede consultar la documentación de la biblioteca orm que está utilizando para ver cómo configurar el tamaño del grupo de conexiones, solo unas pocas líneas de código, simplemente cámbielo. Por ejemplo, en el lenguaje go, gormse establece así

func Init() {
  db, err := gorm.Open(mysql.Open(conn), config)
    sqlDB, err := db.DB()
    // SetMaxIdleConns 设置空闲连接池中连接的最大数量
    sqlDB.SetMaxIdleConns(200)
    // SetMaxOpenConns 设置打开数据库连接的最大数量
    sqlDB.SetMaxOpenConns(1000)
}

grupo de almacenamiento intermedio demasiado pequeño

El número de conexiones ha aumentado y la velocidad también ha aumentado.

Me he encontrado con entrevistadores que preguntarán, ¿hay alguna otra forma de hacerlo más rápido?

Que tiene que fruncir el ceño, fingir pensar y decir: .

En el proceso de consulta de la base de datos anterior, mencionamos que después de ingresar a innodb, habrá una capa de grupo de búfer de memoria, que se usa para cargar páginas de datos de disco en páginas de memoria. Si desea ir al disco IO, será lento.

Es decir, si mi grupo de búfer es más grande, entonces podemos poner más páginas de datos. En consecuencia, es más probable que la consulta SQL llegue al grupo de búfer y, naturalmente, la velocidad de la consulta es más rápida.

El tamaño del grupo de búfer se puede consultar con el siguiente comando, la unidad es Byte:

mysql> show global variables like 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.01 sec)

eso 128Mbes

Si quieres hacerlo más grande. se puede ejecutar

mysql> set global innodb_buffer_pool_size = 536870912;
Query OK, 0 rows affected (0.01 sec)

mysql> show global variables like 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 536870912 |
+-------------------------+-----------+
1 row in set (0.01 sec)

Esto aumenta el grupo de búfer a 512 Mb.

Sin embargo, si el tamaño del grupo de búfer es normal, pero la consulta es lenta debido a otras razones , no tiene sentido cambiar el grupo de búfer.

Pero aquí viene el problema.

¿Cómo sabe si el grupo de búfer es demasiado pequeño?

Esto nos permite ver la tasa de aciertos de caché del grupo de búfer .

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-5e2XL17Y-1649810228833) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK398LGqItEAZKn636v7utoQ0pHkksTErGSHrQwqz view grupo de búfer27WNxBIrwXxibLxSH tasa de aciertos")]

Ver la tasa de aciertos del grupo de búfer

show status like 'Innodb_buffer_pool_%';Puede ver información sobre el grupo de búfer a través de .

Innodb_buffer_pool_read_requestsIndica el número de solicitudes de lectura.

Innodb_buffer_pool_readsIndica el número de solicitudes para leer datos del disco físico.

Entonces, la tasa de aciertos del grupo de búfer se puede obtener así:

buffer pool 命中率 = 1 - (Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%

Por ejemplo, en mi captura de pantalla anterior, 1 - (405/2278354) = 99,98 %. Se puede decir que la tasa de acierto es muy alta.

En circunstancias normales, la tasa de aciertos del grupo de búfer está 99%por encima. Si es inferior a este valor, es necesario considerar aumentar el tamaño del grupo de búfer de innodb.

Por supuesto, esta tasa de acierto también se puede monitorear , de modo que el sql se ralentiza en medio de la noche, y la causa se puede ubicar en el trabajo por la mañana, lo cual es muy cómodo.

¿Qué otra mierda?

Como se mencionó anteriormente , se agrega un grupo de búfer a la capa del motor de almacenamiento para almacenar en caché las páginas de la memoria, lo que puede acelerar las consultas.

Por la misma razón, la capa del servidor también puede agregar un caché para almacenar en caché directamente los resultados de la primera consulta, de modo que la siguiente consulta pueda devolverse de inmediato, lo que suena hermoso.

Es lógico que si se golpea el caché, de hecho puede acelerar la consulta. Sin embargo, esta función es muy limitada. El mayor problema es que mientras se actualice la tabla de la base de datos, todos los cachés de la tabla se invalidarán . Las actualizaciones frecuentes de la tabla de datos provocarán la invalidación frecuente del caché. Por lo tanto, esta función solo es adecuada para aquellas tablas de datos que no se actualizan mucho.

Además, esta función 8.0版本fue eliminada después de eso. Entonces, esta función se puede usar para chatear, no hay necesidad de usarla en producción.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-5VblIOm1-1649810228833) (https://mmbiz.qpic.cn/mmbiz_png/AnAgeMhDIianbibkNQ7b3dWIYFDypVnpK3X3iag9tDib7wYs /kuOov5bX3sQWjBpZu1wGvahlIu8 eliminar")]

Se elimina la caché de consultas

Resumir

  • La consulta de datos demasiado lenta suele ser un problema de índice. Puede deberse a que se seleccionó el índice incorrecto o a que el número de filas consultadas es demasiado.

  • La cantidad de conexiones de clientes y bases de datos es demasiado pequeña, lo que limitará la cantidad de consultas SQL simultáneas. Aumentar la cantidad de conexiones puede mejorar la velocidad.

  • Habrá una capa de grupo de búfer de memoria en innodb para mejorar la velocidad de consulta. La tasa de aciertos es generalmente> 99%. Si es inferior a este valor, puede considerar aumentar el tamaño del grupo de búfer, lo que también puede mejorar la velocidad.

  • De hecho, la caché de consultas puede acelerar la consulta, pero generalmente no se recomienda abrirla porque el límite es relativamente grande y esta función se eliminó en Mysql después de 8.0.

Al final

Recientemente, el volumen de lectura de las actualizaciones originales ha disminuido constantemente, y después de pensarlo, di vueltas y vueltas por la noche.

Tengo una solicitud inmadura.

imagen

Ha pasado mucho tiempo desde que me fui de Guangdong, y nadie me llamó Pretty Boy durante mucho tiempo.

¿Puedes llamarme chico bonito en el área de comentarios ?

¿Puede cumplirse un deseo mío tan amable y sencillo?

Si realmente no puedes hablar, ¿puedes ayudarme a hacer clic en Me gusta y mirar en la esquina inferior derecha ?

Deja de hablar, ahoguémonos juntos en el océano del conocimiento.

Haga clic en la tarjeta de presentación a continuación para seguir la cuenta oficial: [Depuración de Xiaobai]

Depuración de Xiaobai

Prométeme, después de prestar atención, aprende bien las técnicas, no solo colecciones mis emojis. .

31 contenido original

sin publico

¿No estás satisfecho con hablar mierda en el área de mensajes?

Agrégame, hemos creado un grupo de remadas y fanfarronadas. En el grupo, puedes charlar sobre temas interesantes con compañeros o entrevistadores que te puedas encontrar la próxima vez que cambies de trabajo. ¡Simplemente estupendo! ¡abierto! ¡Corazón!

imagen

imagen

Artículos recomendados:

Supongo que te gusta

Origin blog.csdn.net/ilini/article/details/124139560
Recomendado
Clasificación