mysql-SQL Tuning

Este artículo es un cierto grado de base de SQL, pero si hay problemas tales como el uso del modo de optimización de índices no del todo claro quién SQL, señaló una forma de uso.

Este artículo no es un puro original, es una combinación de blog anterior, escribir un resumen de su propio blog.

 

MySQL se unen a una colección de uso: https://blog.csdn.net/lukabruce/article/details/80568796

 

Índice, sub-biblioteca de subtabla de texto SQL, etc., afectará al rendimiento de SQL.

concepto:

1. Base de datos de transacción propiedades ACID

4 característica de la transacción de base de datos:
atomicidad (Atómica):
 una pluralidad de operaciones en la transacción, integral, o son exitosa o fallida; todo o nada.
La consistencia (Consistencia):  Después de las operaciones de transacción, en la que el estado de la base de datos y reglas de negocio son los mismos; por ejemplo, a, b cuenta después de cada transferencia, la cantidad total sin cambios;
aislamiento (aislamiento):  entre ejecución en serie de múltiples transacciones como el mismo, no afectan entre sí;
persistente (Durabilidad):  después de que se confirma la transacción persistido a almacenamiento permanente.

 

3. diferencia MySQL entre los niveles de aislamiento de RC y RR

MySQL RR nivel de aislamiento predeterminado de base de datos, pero la realidad es que el uso de RC y RR niveles de aislamiento son muchas. Al igual que Taobao, RC Netease están utilizando nivel de aislamiento. Entonces, ¿qué diferencia hace en MySQL RC y RR? ¿Cómo elegimos? ¿Por MySQL como el nivel de aislamiento RR defecto?

4. RC y RR diferencia en términos de la cerradura

1> Obviamente RR bloqueo Distancia de apoyo (bloqueo de próxima clave), mientras que RC hay bloqueo brecha. Debido a que MySQL necesita de bloqueo brecha RR para resolver el problema de la lectura fantasma. RC nivel de aislamiento y se le permite leer y leer fantasma irrepetible. Por lo tanto, RC concurrencia es generalmente mejor que la RR;

2> niveles de aislamiento RC, después de pasar a través del filtro, donde las condiciones no cumplen con el candado de línea en las condiciones de grabación, serán liberados (aunque con ello se perjudica el "principio de bloqueo de dos etapas"), sin embargo el nivel de aislamiento RR, incluso si no cumple con las condiciones en las registro, no liberará bloqueos de registro y bloqueo brecha; cerradura desde el punto de vista, RC concurrencia debe ser mejor que RR; inserción adicional en t ... a partir seleccione s, donde s cerradura declaración sobre la mesa no es lo mismo.

5. Revisar la base de datos ha sido bloqueada y la operación que las líneas

Dos, MySQL bloqueos de registro, bloqueos de tabla

Para la tabla myisam seleccionar una tabla bloqueada, que dará lugar a otros cuelga de operación en un estado de espera.
Para seleccionar las tablas InnoDB no va a bloquear la tabla. De hecho, aquí para usar instantáneas. Instantánea no discutido aquí.

innodb común, seleccione ... para la actualización, asegúrese de prestar atención a dónde + ID o el filtro de campo de índice único, de lo contrario, dará lugar a la fijación de la mesa.

Consejos de optimización:

1. Optimización del servidor, por ejemplo max_connection gran cambio, connection_timeout modificado

2. Optimizar las conexiones de clientes, agrupación de conexiones multiplexadas

3. nivel de arquitectura.

    1) el uso de la memoria caché (por ejemplo redis).

    2) Si no hay cúmulos abiertos, leer y escribir por separado.

    3) Incluso si un grupo de lectura y escritura de separación, suponiendo que la cantidad de datos de millones de cómo también es lento, y luego sub-biblioteca subtabla

4. Configure slow_query_log, durante mucho tiempo analizando el tiempo de ejecución supera el sql conjunto, sino también el consumo de ciertas propiedades; herramientas de análisis estadístico se pueden utilizar con mysqldumpslow directorio bin consulta lenta.

optimización de SQL:

1. Si la consulta de paginación es demasiado complicado, se puede averiguar los datos paginados, a continuación, comprobar directamente los datos que se especifican columna de ráfaga de datos.

2.case cuando comunicado, escrito antes, donde impacto en el rendimiento no es demasiado grande, pero puede llevar mucho tiempo para escribir en la parte trasera donde

3.mysql grandes cantidades de datos mediante la ficha límite, ya que aumenta el número de página, la eficiencia de búsqueda es baja.

    seleccionar * de producto límite de 10, 20 0.016秒
    seleccionar * de producto límite de 100, 20 0.016秒
    seleccionar * de producto límite de 10.000, 20 0.094秒

    SELECT * FROM producto límite de 400.000, 20 3.229 秒

   Que abarca el uso de la tabla de índices para acelerar la consulta de paginación
   que todos sabemos, el uso de la consulta índice si la declaración contiene sólo la columna de índice (que abarca los índices), entonces esta situación pronto consultas.

* SELECT FROM producto donde ID> = (seleccione ID de orden de producto por límite ID 866613, 1) límite 20 或者

   * SELECT FROM producto un JOIN (seleccione ID de orden de producto por límite ID 866613, 20) b EN a.ID = b.id

   tiempo de consulta de 0,2 segundos! 

SELECT ID de cobro revertido donde vtype = 1 límite 90000,10; // agregar la búsqueda (vtype, id) un índice de tal compuesto, se rápidamente

2. Los trabajos de indexación

Índice innodb MySQL ahora se utiliza principalmente estructura de árbol B +, B + árbol está equilibrado absolutamente árbol, lo que necesita saber ciertas partes de información que van a la derecha oa la izquierda, puede haber una reducción buena io operación entre la memoria principal y los discos duros, para acelerar velocidad de las consultas. (Caso: B no es equivalente al árbol binario equilibrado, que es un múltiplo árboles de búsqueda, los árboles B, y varios datos se almacenan en el nodo de hoja, y entre los nodos de hoja están conectados por punteros, pero balanza dispone de árbol.)

Almacenamiento estructura del índice MySQL de uso general B + árbol, de hecho, tiene hash de almacenamiento de la estructura, la estructura de hash para encontrar baja complejidad o de datos (1), mientras que el árbol B + en general, sólo O (log n), ¿por qué elegir b + árbol?

análisis:

1. Por qué no es un árbol binario? 
Porque tenemos que considerar el impacto de S de disco, que es relativo a la memoria es muy lento. índice de base de datos se almacena en el disco, y cuando la cantidad de datos, el índice general no puede ser cargado en toda la memoria, puede ser uno cargado por uno (correspondiente al nodo del árbol de índice) cada página de disco. Por lo que queremos reducir el número de IO

2. ¿Por qué no usar de hash?

Y los índices en la base de datos es generalmente en el disco, grandes volúmenes de datos no puede ser el caso, una vez cargado en la memoria de diseño árbol B + puede permitir que los datos a los lotes de carga, mientras que la altura más baja del árbol, para mejorar la eficiencia de búsqueda.

Esto y escenarios de negocio relacionados. Si elige solamente un conjunto de datos, es de hecho más rápido Hash. Pero la base de datos a menudo seleccionará múltiple, esta vez debido a la B + índice de árbol ordenado, y han lista enlazada, su ratio de eficiencia de la consulta sobre Hash mucho más rápido.

Generalmente saber, no en <> es nula que no tomaron el índice, no de memoria es muy simple, porque está utilizando índices de árbol B + no conocen bajo las cuales mirada desde la izquierda o la ruta a la derecha del árbol, que sólo puede Búsqueda mesa llena, la ineficiencia, aquí es más de validación, que no entiendo índice común del subyacente.

Para castañas en, todos sabemos que la longitud de datos de la columna de índice es demasiado tiempo afectará a la eficacia del índice, pero el real es ¿por qué?

De hecho, debido b + índice de árbol MySQL usada, todos los datos se coloca en un nodo de hoja, por lo que cuando el índice de la parte del tamaño de columna es demasiado grande, que dará lugar a un nodo de hoja para cada almacenamiento de datos no puede ser demasiado, lo que resulta en aparecerá más hojas, más hojas dará lugar a un aumento en el número de capas del árbol, el número de capas de profundidad, y cuando el número de tiempos pasados ​​io Encuentre también aumentó, tan baja en la eficiencia.

 

2. Ejecutar sintonización

herramienta IDEA recomienda XRebel, que puede localizar rápidamente la eficiencia de SQL es demasiado baja

prueba

instrucción:

explicar extendida seleccionar * de nombre de tabla;
mostrar advertencias;

 

Instrucciones de uso explican explicar extenso análisis puede ayudar a seleccionar comunicado, que puede ser objeto de hacer la optimización.

mostrar advertencias se puede ver que escribimos sql a la forma en que se ha optimizado, que se puede encontrar ya sea visualmente excelente propia sql.

 

Aquí hay una tabla de prueba:

CREATE TABLE `t_stu` (
  ` int id` (11) NOT NULL AUTO_INCREMENT,
  `name` varchar (20) DEFAULT NULL,
  PRIMARY KEY (` id`)
) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8;

 

Comando de entrada es explicar xxx extendidos Resultados a :

mostrar advertencias; instrucción como resultado dos :

Los resultados se pueden ver dos muy claro que escribimos sql rellenar automáticamente los nombres de las columnas enteras

Resolver

Entonces, ¿cómo analizar los resultados de la misma?

Un resumen de los resultados :( esto es una cita de Bowen se mencionó anteriormente)

 

Ellos vinieron con algunos consejos podrían fácilmente entendido mal:

  1. En general, la columna puede ser NULL NO NULO no cambiará la cantidad de rendimiento de ayuda, pero si va a crear un índice en la columna, la columna se debería establecer como NOT NULL.

  2. Especifica los tipos de enteros de anchura, tales como INT (11), sin huevos. INT de 32 bits (4 bytes) de espacio de almacenamiento, se ha determinado que indica un rango, el INT (. 1), y INT (20 es) se calculan y almacenan para el mismo.

  3. UNSIGNED permitió expresar negativo, más o menos el límite superior del número positivo se duplicó. TINYINT tal almacenamiento es -128-127 gama, y ​​el rango se almacena UNSIGNED TINYINT 0 - 255.

  4. En términos generales, no hay mucha necesidad de utilizar el tipo de datos DECIMAL. Incluso cuando se necesita para almacenar los datos financieros, todavía se puede utilizar BIGINT. Tal como la necesidad de piezas precisas por millón, entonces los datos pueden ser multiplicados por un millón y luego utilizan el almacenamiento BIGINT. Esto evita cálculos de punto flotante no son cálculo preciso y exacto de DECIMAL problema costoso.

  5. TIMESTAMP utiliza 4 bytes de espacio de almacenamiento, DATETIME 8 bytes de espacio de almacenamiento. Por lo tanto, TIMESTAMP sólo puede expresar 1970--2038 años, el intervalo es mucho más pequeño que DATETIME indicada, y los valores TIMESTAMP debido a las diferentes zonas de tiempo y diferentes.

  6. tipo no utilizado en la mayoría de los casos enumerados es necesario, lo que es se fija una lista enumerada inconveniente de cadenas, cuerdas y añadir Retire (opción de enumeración) debe utilizar el ALTER TABLE (aunque sólo al final de la lista de elementos adicionales, no es necesario para reconstruir la tabla).

  7. la columna del esquema no demasiado. Se necesita la razón entre la capa de servidor y la capa de la memoria por la línea Buffer funciona API del motor de almacenamiento de datos en formato copia del motor, a continuación, la capa de servidor decodificación de contenido de búfer en las columnas, el costo de este proceso de conversión es muy alta. Si la columna demasiadas columnas y unos pocos utilizan realmente, puede causar intensivo de la CPU.

  8. Gran mesa de ALTER TABLE es muy lento, realiza MySQL la mayor parte de la operación resultados Tabla de modificación es la creación de una nueva estructura con láminas de mesas vacías, averiguar a través de la mesa de edad todos los datos en una nueva tabla, a continuación, elimine la tabla de edad. Especialmente en el caso de que la memoria y la mesa es tan grande, pero todavía hay mucho del índice, se tarda más tiempo. Por supuesto, hay algunos inteligente, pero inútil puede resolver este problema, están interesados ​​pueden mirarse.

base de indexación 

 

Volver a la tabla: consulta innodb es el segundo índice, los nodos de hoja del B + árbol que se encuentra no toda la datos (índice InnoDB dos hojas sólo la clave almacenada clave de índice y una clave primaria), el índice de clave principal para obtener más B + encontrar un árbol para ir de nuevo, se trata de volver a la mesa.

Cubriendo índices: Igual que el anterior, pero la excepción es seleccionar el campo de índice secundario del XX, debido a la columna de la consulta es sólo campos de índice secundario, los índices en el índice secundario árbol B + para encontrar el tiempo, los nodos hoja tienen los datos deseados, y no volver a la mesa .

 mysql si se debe utilizar el índice, optimizador basado en costos determina la base principal. Comparar inteligente, por lo que algunos juegos de troqueles de reglas no están en línea.

Por ejemplo banda de consulta no es igual, no en. Mucha gente dice que el índice conducirá al fracaso, pero no necesariamente.

Por ejemplo, suponiendo incremento tabla de clave principal, seleccione * de la tabla donde id = 1 ;! Índice irá, porque el optimizador de encontrar este caso, encontrar el ID de nodo hoja = 1, debido a que los nodos de hoja están ordenados, por lo que encontrar nodo hoja directo a los datos después de 1, que es el índice para subir, así que lo mejor es ser juez flexible.

Publicado 21 artículos originales · ganado elogios 9 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/a5552157/article/details/83104922
Recomendado
Clasificación