Puntos clave de la entrevista MySQL (1)

Puntos clave de la entrevista MySQL (1)

Prólogo

  • MySQL es un ** sistema de gestión de bases de datos relacionales, ** desarrollado por la compañía sueca MySQL AB y pertenece a los productos de Oracle. MySQL es uno de los sistemas de gestión de bases de datos relacionales más populares. En términos de aplicaciones WEB, MySQL es uno de los mejores software de aplicación RDBMS (Sistema de gestión de bases de datos relacionales, sistema de gestión de bases de datos relacionales).
  • MySQL es un sistema de gestión de bases de datos relacionales: las bases de datos relacionales almacenan datos en diferentes tablas en lugar de colocar todos los datos en un gran almacén, lo que aumenta la velocidad y la flexibilidad.
  • El lenguaje SQL utilizado por MySQL es el lenguaje estandarizado más utilizado para acceder a bases de datos. El software MySQL adopta una política de doble licencia, que se divide en una versión comunitaria y una versión comercial. Debido a su pequeño tamaño, alta velocidad y bajo costo total de propiedad, especialmente la función de código abierto, el desarrollo de sitios web pequeños y medianos generalmente elige MySQL como la base de datos del sitio web.

1. Los tres paradigmas de la base de datos.

  • 1. La primera forma normal (1NF): el campo es atómico y no se puede dividir. (Todos los sistemas de bases de datos relacionales satisfacen la primera forma normal. Los campos en la tabla de la base de datos son de un solo atributo y no se pueden dividir).
  • 2. La segunda forma normal (2NF) se establece sobre la base de la primera forma normal (1NF), es decir, para satisfacer la segunda forma normal (2NF), primero debe satisfacerse la primera forma normal (1NF). Cada instancia o fila en la tabla de la base de datos debe ser distinguible de manera única. Por lo general, debe agregar una columna a la tabla para almacenar el identificador único de cada instancia. Esta columna de atributo único se denomina clave primaria o clave primaria.
  • 3. Para cumplir con la tercera forma normal (3NF) primero debe satisfacer la segunda forma normal (2NF). En resumen, la tercera forma normal (3NF) requiere que una tabla de base de datos no contenga información de clave no primaria ya contenida en otras tablas. > Por lo tanto, la tercera forma normal tiene las siguientes características: >> 1. Cada columna tiene un solo valor >> 2. Cada fila se puede distinguir. >> 3. Cada tabla no contiene información clave no primaria que otras tablas ya contienen.

2. Experiencia en optimización de bases de datos.

  • 1. Utilice PreparedStatement, generalmente un rendimiento superior al de la instrucción: un sql enviado al servidor para realizar, que incluye pasos: verificación de sintaxis, análisis semántico, compilación y caché.
  • 2. Existen restricciones de clave externa que afectan el rendimiento de la inserción y eliminación. Si el programa puede garantizar la integridad de los datos, elimine la clave externa al diseñar la base de datos.
  • 3. Se permite la redundancia adecuada en la tabla, por ejemplo, el número de respuestas a las publicaciones de temas y el último tiempo de respuesta, etc. 4. UNION ALL es mucho más rápido que UNION, por lo que si puede confirmar que los dos conjuntos de resultados combinados no contienen datos duplicados y no necesitan ser ordenados Si es así, use UNIONALL. >> Las palabras clave UNION y UNION ALL combinan dos conjuntos de resultados en uno, pero ambos son diferentes en términos de uso y eficiencia. > 1. Tratamiento de resultados duplicados: UNION filtrará los registros duplicados después de la vinculación de la tabla, y Union All no eliminará los registros duplicados. > 2. Procesamiento de la clasificación: Union ordenará según el orden de los campos, UNION ALL simplemente devuelve el resultado después de fusionar los dos resultados.

3. Índices comúnmente utilizados

  • 1. Índice ordinario: es decir, crear un índice para la tabla de la base de datos
  • 2. Índice único: similar al índice ordinario, la diferencia es: el valor de la columna de índice de la base de datos MySQL debe ser único, pero se permiten valores nulos
  • 3. Índice de clave primaria: es un índice único especial, que no permite valores nulos. Generalmente, el índice de clave principal se crea al mismo tiempo cuando se crea la tabla
  • 4. Índice combinado: para extraer aún más la eficiencia de MySQL, debemos considerar el establecimiento de un índice combinado. Es decir, varios campos en una tabla de base de datos se combinan como un índice combinado.

4. Mecanismo de trabajo del índice de base de datos MySQL

  • El índice de la base de datos es una estructura de datos ordenada en el sistema de administración de la base de datos para ayudar a consultar y actualizar rápidamente los datos en la tabla de la base de datos. La implementación del índice generalmente usa el árbol B y su variante B + árbol

5. La operación de comando básico de MySQL

  • 1. ¿Se está ejecutando MySQL? Ejecute el comando service mysqlstatus en Debian y ejecute el comando de estado mysqld service en RedHat
  • 2. Inicie o detenga el servicio MySQL: ejecute el comando service mysqld start para iniciar el servicio, ejecute el comando service mysqld stop para detener el servicio
  • 3. Inicio de sesión de Shell en MySQL: ejecute el comando mysql -u root -p
  • 4. Enumere todas las bases de datos: ejecute el comando show bases de datos;
  • 5. Cambie a una base de datos y trabaje en ella: ejecute el comando use nombre de la base de datos , para ingresar la base de datos con el nombre de la base de datos
  • 6. Listar todas las tablas en una base de datos: mostrar tablas;
  • 7. Obtenga los nombres y tipos de todos los objetos Field en la tabla: describe table_name;

6. Principio y proceso de replicación MySQL

  • La función de replicación incorporada de Mysql es la base para crear aplicaciones grandes y de alto rendimiento. Distribuya los datos de Mysql a múltiples sistemas. Este mecanismo de distribución se logra copiando los datos de un host Mysql a otros hosts (esclavos) y volviéndolos a ejecutar. * Un servidor actúa como el servidor maestro durante la replicación, y uno o más servidores actúan como servidores esclavos.
  • El servidor maestro escribe actualizaciones en el archivo de registro binario y mantiene un índice del archivo para rastrear el ciclo de registro. Estos registros pueden registrar actualizaciones enviadas al servidor esclavo. Cuando un servidor esclavo se conecta al servidor maestro, informa al servidor maestro de la última posición de lectura actualizada con éxito en el registro.
  • El servidor esclavo recibe cualquier actualización que haya ocurrido desde entonces, luego bloquea y espera a que el servidor maestro notifique las nuevas actualizaciones. El proceso es el siguiente
    • 1. El servidor principal registra la actualización en un archivo de registro binario.
    • 2. El servidor esclavo copia el registro binario del servidor maestro en su propio registro de reproducción.
    • 3. Vuelva a hacer el tiempo en el registro de retransmisión desde el servidor y aplique la actualización a su propia base de datos.

7. Los tipos de replicación soportados por MySQL

  1. Replicación basada en sentencias: sentencias SQL ejecutadas en el servidor maestro y las mismas sentencias ejecutadas en el servidor esclavo. MySQL utiliza la replicación basada en sentencias de forma predeterminada, que es más eficiente. Una vez que se descubra que es imposible copiar con precisión, seleccionará automáticamente la copia basada en líneas.
  2. Copia basada en línea: copie el contenido modificado al pasado en lugar de ejecutar el comando en el servidor esclavo. Compatible desde mysql5.0
  3. Replicación de tipo mixto: de manera predeterminada, se utiliza la replicación basada en instrucciones. Una vez que la replicación basada en instrucciones no se puede replicar con precisión, se utiliza la replicación basada en filas.

8. La diferencia entre MyISAM e InnoDB en MySQL

  1. Soporte de transacciones> MyISAM: el énfasis está en el rendimiento, cada consulta es atómica, su velocidad de ejecución es más rápida que el tipo InnoDB, pero no proporciona soporte de transacciones. > InnoDB: proporciona funciones avanzadas de base de datos como transacciones de soporte de transacciones y claves foráneas. Una tabla de tipo segura para transacciones (compatible con ACID) con transacciones, reversiones y capacidades de recuperación de fallos.
  2. InnoDB admite bloqueos a nivel de fila, mientras que MyISAM admite bloqueos a nivel de tabla. >> Cuando los usuarios operan la tabla myisam, las instrucciones de selección, actualización, eliminación e inserción bloquearán automáticamente la tabla. Si la tabla bloqueada cumple la condición de inserción simultánea, Se pueden insertar nuevos datos al final de la tabla.
  3. InnoDB admite MVCC, mientras que MyISAM no
  4. InnoDB admite claves foráneas, mientras que MyISAM no
  5. Clave primaria de tabla> MyISAM: permite que existan tablas sin ningún índice y clave primaria, y el índice es la dirección de la fila almacenada. > InnoDB: si no se establece una clave primaria o un índice único no nulo, se generará automáticamente una clave primaria de 6 bytes (no visible para el usuario). Los datos son parte del índice primario y el índice adicional contiene el valor del índice primario.
  6. InnoDB no admite la indexación de texto completo, mientras que MyISAM sí.
  7. Portabilidad, copia de seguridad y recuperación> MyISAM: los datos se almacenan en forma de archivos, por lo que será muy conveniente en la transferencia de datos multiplataforma. Durante la copia de seguridad y la restauración, puede operar en una tabla por separado. > InnoDB: la solución gratuita puede ser copiar archivos de datos, respaldar binlog o usar mysqldump, lo cual es relativamente doloroso cuando la cantidad de datos llega a docenas de G
  8. Estructura de almacenamiento> MyISAM: cada MyISAM se almacena como tres archivos en el disco. El nombre del primer archivo comienza con el nombre de la tabla, y la extensión indica el tipo de archivo. Definición de la tabla de almacenamiento de archivos .frm. La extensión del archivo de datos es .MYD (MYData). La extensión del archivo de índice es .MYI (MYIndex). > InnoDB: todas las tablas se almacenan en el mismo archivo de datos (también pueden ser múltiples archivos o archivos de espacio de tablas independientes). El tamaño de las tablas de InnoDB está limitado solo por el tamaño de los archivos del sistema operativo, generalmente 2 GB.

9. La diferencia entre varchar y char en MySQL y el significado de varcahr (50)

  1. La diferencia entre varchar y char: char es un tipo de longitud fija, varchar es un tipo de longitud variable.
  2. El significado de 50 en varchar (50): almacena hasta 50 bytes
  3. Significado de 20 en int (20): M en int (M) indica el ancho máximo de visualización para tipos enteros. El ancho legal máximo de visualización es 255.

10. ¿Los nombres de los cuatro niveles de aislamiento de la librería admitidos por InnoDB en MySQL y la diferencia entre ellos?

  1. Leer no comprometido >> En este nivel de aislamiento, todas las transacciones pueden ver los resultados de ejecución de otras transacciones no confirmadas. Este nivel de aislamiento rara vez se usa en aplicaciones prácticas porque su rendimiento no es mucho mejor que otros niveles. La lectura de datos no confirmados también se denomina lectura sucia.
  2. Leer Comprometido >> Este es el nivel de aislamiento predeterminado para la mayoría de los sistemas de bases de datos (pero no el predeterminado de MySQL). Satisface la definición simple de aislamiento: una transacción solo puede ver los cambios realizados por la transacción confirmada. Este nivel de aislamiento también admite las llamadas lecturas no repetibles (lectura no repetible), ya que otras instancias de la misma transacción pueden tener nuevas confirmaciones durante el procesamiento de la instancia, por lo que la misma selección puede devolver resultados diferentes.
  3. Lectura repetible >> Este es el nivel de aislamiento de transacción predeterminado de MySQL. Asegura que varias instancias de la misma transacción verán la misma fila de datos cuando lean datos simultáneamente. Sin embargo, en teoría, esto causará otro problema espinoso: PhantomRead. En pocas palabras, la lectura fantasma se refiere a cuando un usuario lee un rango de filas de datos, otra transacción inserta una nueva fila en el rango, y cuando el usuario lee el rango de filas de datos nuevamente, habrá nuevas Línea "fantasma". Los motores de almacenamiento InnoDB y Falcon resuelven este problema a través de un mecanismo de control de concurrencia de múltiples versiones (MVCC, bloqueo de brecha de control de concurrencia multiversional). Nota: De hecho, varias versiones solo resuelven el problema de las lecturas no repetibles, y la adición de bloqueos de espacio (es decir, el llamado control de concurrencia aquí) solo resuelve el problema de lectura mágica.
  4. Serializable (Serializable) >> Este es el nivel de aislamiento más alto. Aplica el orden de las transacciones para que sea imposible que entren en conflicto entre sí, resolviendo así el problema de la lectura fantasma. En resumen, es agregar un bloqueo compartido en cada línea de datos leídos. En este nivel, puede producirse una gran cantidad de tiempos de espera y contención de bloqueo.

11. El campo en mayúscula de la tabla y el campo X no se actualizarán con frecuencia, principalmente para lectura, ¿cuál es la ventaja de dividir este campo en una subtabla?

  • Si hay tipos de campos grandes (texto, blob) en el campo y no hay muchos accesos a estos campos, ponerlos juntos se convierte en una desventaja. El almacenamiento de registros de la base de datos MYSQL se almacena en filas, y el tamaño del bloque de datos es fijo (16K). Cuanto más pequeño es cada registro, más registros se almacenan en el mismo bloque. En este punto, se deben eliminar los campos grandes, de modo que cuando se trata con la mayoría de las consultas de campo pequeñas, se pueda mejorar la eficiencia. Cuando se necesita consultar un campo grande, la consulta relacionada en este momento es inevitable, pero también vale la pena. Después de dividir, el UPDAE del campo ACTUALIZARÁ varias tablas

12. ¿Cuál es la implementación del bloqueo de fila del motor InnoDB en MySQL?

  • El bloqueo de fila de InnoDB se logra bloqueando los elementos del índice en el índice. Esto es diferente de Oracle. Esto último se logra bloqueando la fila de datos correspondiente en el bloque de datos. La implementación de bloqueos de fila de InnoDB significa que: solo cuando los datos se recuperan por condiciones de índice, InnoDB usa bloqueos de nivel de fila; de lo contrario, ¡InnoDB usará bloqueos de tabla!

13. ¿Cuáles son los parámetros globales que controlan la asignación de memoria en MySQL?

  1. Tamaño del búfer clave :> * el tamaño del búfer clave especifica el tamaño del búfer de índice, que determina la velocidad del procesamiento del índice, especialmente la velocidad de lectura del índice. Al verificar los valores de estado Solicitudes de lectura de clave y Lecturas de clave , puede saber si la configuración del tamaño del búfer de clave es razonable. La proporción de lecturas de clave / solicitudes de lectura de clave debe ser lo más baja posible, al menos 1: 100, 1: 1000 es mejor (los valores de estado anteriores se pueden obtener utilizando SHOW STATUS LIKE ' key read%'). > * el tamaño del búfer clave solo funciona para las tablas MyISAM. Incluso si no utiliza las tablas MyISAM, pero la tabla del disco temporal interno es la tabla MyISAM, debe usar este valor. Puede usar el valor de estado de verificación creado en las tablas de disco tmp para obtener detalles. Para máquinas con memoria 1G, si no usa la tabla MyISAM, el valor recomendado es 16M (8-64M)> * tamaño del búfer clave Notas de configuración >>> 1. Tecla únicaEl tamaño del búfer no puede exceder 4G. Si la configuración excede 4G, puede encontrar los siguientes 3 errores: >>>>> http://bugs.mysql.com/bug.php?id=29446 >>>>> http : //bugs.mysql.com/bug.php? id = 29419 >>>>> http://bugs.mysql.com/bug.php?id=5731 >>> 2. Se recomienda configurar el búfer de claves en la memoria física 1/4 (para el motor MyISAM), o incluso el 30% ~ 40% de la memoria física, si el tamaño del búfer de la clave está configurado demasiado grande, el sistema buscará frecuentemente, reduciendo el rendimiento del sistema. Debido a que MySQL usa el caché del sistema operativo para almacenar en caché los datos, tenemos que reservar suficiente memoria para el sistema; en muchos casos, los datos son mucho más grandes que el índice. >>> 3. Si el rendimiento de la máquina es superior, puede configurar múltiples buffers de clave para permitir que diferentes buffers de clave almacenen en caché índices especiales.
  2. innodb buffer pool_size> indica el tamaño de los bytes de la agrupación de almacenamiento intermedio, la tabla de caché InnoDB y el área de memoria de datos de índice. El valor predeterminado de mysql es 128M. El valor máximo depende de la arquitectura de su CPU. En los sistemas operativos de 32 bits, el valor máximo es 4294967295 (2 ^ 32-1). En los sistemas operativos de 64 bits, el valor máximo es 18446744073709551615 (2 ^ 64-1). > En los sistemas operativos de 32 bits, el tamaño máximo de la CPU y el sistema operativo es inferior al máximo establecido. Si el tamaño de la agrupación de almacenamiento intermedio establecida es mayor que 1G, establezca el valor de las instancias de agrupación de almacenamiento intermedio innodb en mayor que 1.> * La lectura y escritura de datos es muy rápida en la memoria, el tamaño de la agrupación de almacenamiento intermedio innodb reduce la lectura y escritura en el disco. Solo después de que se envían los datos o se cumplen las condiciones del punto de control, los datos de la memoria se vuelcan al disco al mismo tiempo. Sin embargo, la memoria también es utilizada por el sistema operativo u otros procesos de la base de datos.En general, el tamaño de la agrupación de almacenamiento intermedio se establece entre 3/4 y 4/5 de la memoria total. Si no se configura correctamente, el uso de memoria puede desperdiciarse o usarse demasiado. Para los servidores ocupados, el grupo de búferes se dividirá en varias instancias para mejorar la concurrencia del sistema y reducir la contención entre cachés de lectura y escritura entre subprocesos. El tamaño de la agrupación de almacenamiento intermedio se ve afectado primero por las instancias de agrupación de almacenamiento intermedio innodb , por supuesto, el impacto es menor.
  3. tamaño de la memoria caché de consultas > Cuando mysql recibe una consulta de tipo de selección, mysql procesará la consulta para obtener un valor hash, y luego usará el valor hash para que coincida con la memoria caché de la consulta, si no hay coincidencia, entonces esto El valor hash se almacena en una lista hash y el conjunto de resultados de la consulta se almacena en la memoria caché. Cada nodo hash de la lista vinculada que almacena el valor hash almacena la dirección del conjunto de resultados de la consulta correspondiente en la memoria caché, así como algunas de las consultas involucradas. Información relevante de la tabla; si la misma consulta coincide con el valor hash, el resultado de la consulta correspondiente establecido en la memoria caché se devuelve directamente al cliente. Si algún dato en cualquier tabla de mysql cambia, notificará al caché de consultas que todas las cachés de consultas relacionadas con la tabla no son válidas y liberará la dirección de memoria ocupada. >Ventajas y desventajas del caché de consultas >> 1. Consumo de recursos causado por el cálculo hash de la declaración de consulta y la búsqueda hash. mysql realizará un cálculo de hash en cada consulta recibida del tipo de selección y descubrirá si existe el caché de la consulta. Aunque la eficiencia del cálculo de hash y la búsqueda es lo suficientemente alta, el consumo de una consulta puede ignorarse, pero una vez que está involucrado Alta concurrencia, cuando hay miles de consultas, la sobrecarga causada por el cálculo de hash y la búsqueda se toma en serio; >> 2. El problema del error de caché de consultas. Si la tabla cambia con frecuencia, la tasa de falla del caché de consultas será muy alta. Los cambios en la tabla no solo se refieren a los cambios en los datos de la tabla, sino que también incluyen cualquier cambio en la estructura o el índice; >> 3. Para SQL diferente, pero la misma consulta de conjunto de resultados se almacenará en caché, lo que provocará el consumo de transición de los recursos de memoria. La diferencia de mayúsculas y minúsculas, espacio o comentario, el caché se considera un sql diferente (porque su valor hash será diferente); >> 4. La configuración irrazonable de los parámetros relacionados causará mucha fragmentación de la memoria, la configuración de los parámetros relacionados Preséntalo más tarde.
  4. tamaño del búfer de lectura > es el tamaño del búfer de lectura de MySQL. Las solicitudes de escaneo secuencial de la tabla asignarán un búfer de lectura, y MySQL asignará un búfer de memoria para ello. La variable de tamaño del búfer de lectura controla el tamaño de este búfer. Si la solicitud de exploración secuencial para la tabla es muy frecuente y cree que la exploración frecuente es demasiado lenta, puede mejorar su rendimiento aumentando el valor variable y el tamaño del búfer de memoria.

14. Solo hay un campo de tipo varchar (N) en una tabla, codificación utf8, ¿cuál es el valor máximo de N?

  • Porque cada carácter de utf8 ocupa hasta 3 bytes. La longitud de la línea de definición de MySQL no puede exceder 65535, por lo que el valor máximo de N se calcula como: (65535-1-2) / 3. La razón para restar 1 es que el almacenamiento real comienza desde el segundo byte, y la razón para restar 2 es porque la longitud real de los caracteres debe almacenarse en la longitud de la lista, dividida por 3 debido a la limitación utf8: cada carácter toma hasta 3 bytes .

15. Ventajas y desventajas de (seleccionar *) y (seleccionar todos los campos)

  1. (Seleccione *) Para analizar el diccionario de datos, (seleccione todos los campos) no es necesario
  2. El orden de salida del resultado, (select *) es el mismo que el orden de columnas de la creación de la tabla, (select all fields) en el orden de los campos especificados.
  3. Cambiar el nombre del campo de la tabla, (seleccionar *) no necesita ser modificado, (seleccionar todos los campos) necesita ser cambiado
  4. (Seleccionar todos los campos) se puede indexar para la optimización, (seleccionar *) no se puede optimizar
  5. (Seleccionar todos los campos) es más legible que (seleccionar *)

16. Similitudes y diferencias entre tener cláusula y dónde

  1. Sintácticamente: donde usa los nombres de columna en la tabla, mientras usa selecciona el alias de resultado
  2. Afecta el rango de resultados: donde lee el número de filas de datos de la tabla, devolviendo el número de filas del cliente
  3. Índice: donde puede usar índice, al no poder usar índice, solo puede operar en un conjunto de resultados temporal
  4. La función agregada no se puede usar después de where, y having se usa exclusivamente.

17. Insertar cuando el registro MySQL no existe, actualizar cuando existe el registro

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEYUPDATE c=c+1;

18. Seleccione la sintaxis para insertar y actualizar en MySQL

insert into student (stuid,stuname,deptid) 
select 10,'zhangsan',3
from student where stuid > 8; 
update student a inner join student b 
on b.stuID=10 seta. stuname=concat(b.stuname, b.stuID) 
where a.stuID=10 ;
Publicado 140 artículos originales · 49 alabanzas · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/double_happy111/article/details/105517958
Recomendado
Clasificación