¿Qué preguntas hará el profesor de bases de datos?
La clave primaria se utiliza para identificar la unicidad de los registros de la base de datos. No se permiten registros duplicados y los valores clave no pueden estar vacíos. La clave principal también es un índice especial.
Solo se permite una clave primaria en la tabla de datos, pero puede haber múltiples índices.
El uso de la clave principal creará automáticamente un índice principal en la base de datos, o puede crear un índice en una clave no principal, lo que ayudará a mejorar la eficiencia de las consultas.
Un índice puede mejorar la velocidad de consulta. Es equivalente a un directorio de un diccionario y le permite encontrar rápidamente los resultados que desea sin escanear toda la tabla.
Los valores de índice distintos del índice de clave principal pueden estar vacíos.
La clave principal también puede estar compuesta por varios campos para formar una clave principal compuesta, y la clave principal también debe ser un índice único.
Índice único significa que el valor del índice es único y puede estar compuesto por uno o más campos. Una tabla puede tener múltiples índices únicos.
2. ¿Qué es un índice de base de datos? ¿Qué estructura de datos se utiliza? ¿Por qué el árbol B+ es más adecuado que el árbol B?
Un índice es una estructura de datos (más comúnmente un árbol B) que almacena los valores de columnas específicas de una tabla. Los índices se crean en las columnas de la tabla. Por lo tanto, el punto clave a recordar es que el índice contiene los valores de las columnas de la tabla, que se almacenan en la estructura de datos. Recuerde esto: un índice es una estructura de datos.
¿Qué estructuras de datos se pueden utilizar como índices?
El árbol B es la estructura de datos más utilizada para la indexación. Debido a la baja complejidad del tiempo, las operaciones de búsqueda, eliminación e inserción se pueden completar en tiempo logarítmico. Otra razón importante es que los datos almacenados en el árbol B están ordenados. Un sistema de gestión de bases de datos (RDBMS) normalmente determina qué estructuras de datos se deben utilizar para la indexación. Sin embargo, en algunos casos, cuando crea un índice, puede especificar la estructura de datos que utilizará el índice.
Cuando usamos consultas de índice, es imposible cargar el índice completo en la memoria. Solo podemos cargar cada página del disco una por una, y cada página del disco corresponde a un nodo del árbol de índice. Entonces, el estándar de Mysql para medir la eficiencia de las consultas es la cantidad de IO del disco. Si utilizamos un árbol binario como estructura de índice, el número de IO del disco está relacionado con la altura del árbol de índice.
Para mejorar la eficiencia de las consultas, es necesario reducir la cantidad de E/S de disco. Para reducir la cantidad de E/S de disco, debemos reducir la altura del árbol tanto como sea posible. Necesitamos cambiar la estructura del árbol original "delgada y alta" a "corta y gruesa". Cuantas más ramas haya en cada nivel del árbol, mejor. Entonces B-tree simplemente cumple con nuestros requisitos, que también es una de las características de B-tree.
Árbol B Los nodos del árbol B son palabras clave y datos correspondientes (índice, etc.).
Árbol B+ El árbol B+ es una variante del árbol B. Los nodos que no son hoja solo almacenan índices, no datos reales. Todos los datos se almacenan en nodos hoja. Los nodos hoja del árbol B+ son listas enlazadas, donde se colocan los datos, y los nodos que no son hoja son índices.
Contraste:
El árbol B y el árbol B+ también son adecuados para situaciones en las que cuanto menor es la altura, más rápida es la velocidad de consulta.
El árbol B busca nodos, el árbol B+ solo necesita consultar todos los nodos (índices) y el árbol B consulta índices y datos. Si bien es posible que lo encuentres primero, en casos extremos necesitarás consultar todos los índices y datos, lo cual es menos estable que un árbol B+.
En comparación con el árbol B+, el árbol B+ tiene menos espacio en el disco duro y menores costos de lectura y escritura de io. Debido a que los nodos del árbol B+ solo tienen índices, ocupan menos espacio. En el caso de una consulta, el puntero del disco duro se mueve hacia abajo.
¿Cómo funciona un índice de tabla hash?
Las tablas hash son otra estructura de datos que se puede utilizar como índices; estos índices a menudo se denominan índices hash. La razón para utilizar índices hash es que las tablas hash son extremadamente eficientes para encontrar valores. Por lo tanto, si utiliza un índice hash, puede recuperar el valor de una consulta que compara la igualdad de cadenas muy rápidamente. Por ejemplo, la consulta que analizamos anteriormente (seleccione * de Empleado donde Nombre_Empleado = 'Jesús') puede beneficiarse de un índice hash creado en la columna Nombre_Empleado. El principio de funcionamiento del índice de Harbin es utilizar el valor de la columna como valor clave del índice, y el valor real correspondiente al valor clave es un puntero a la fila correspondiente en la tabla.
Debido a que una tabla hash básicamente puede verse como una matriz asociativa, un elemento de datos típico sería algo como "Jesús => 0x28939", donde 0x28939 es una referencia a la fila de la tabla de memoria que contiene a Jesús. Consultar una base de datos indexada por Harbin para obtener un valor como "Jesús" y obtener una referencia a la fila correspondiente en la memoria es obviamente mucho más rápido que escanear toda la tabla para obtener una fila con un valor "Jesús".
Desventajas del índice hash
Hashtable es una estructura de datos desordenada, que es incapaz de realizar hash de índice para muchos tipos de declaraciones de consulta. Por ejemplo, si desea buscar todos los empleados menores de 40 años. ¿Cómo consultar usando el índice hash? Esto no es factible porque las tablas hash solo son adecuadas para consultar pares clave-valor, es decir, consultas con consultas de igualdad (por ejemplo, "donde nombre = 'Jesús'). El mapeo clave-valor de una tabla hash también significa que el almacenamiento de sus claves está desordenado. Esta es la razón por la cual un índice hash generalmente no es la estructura de datos predeterminada para los índices de bases de datos, porque no es tan flexible como un árbol B cuando se usa como estructura de datos de índice.
3. Tenga en cuenta al crear un índice.
Los índices pueden aumentar la velocidad de acceso a los datos, pero también aumentan el tiempo de procesamiento de las operaciones de inserción, actualización y eliminación. La forma de resolver este problema es analizar el procesamiento comercial. y el uso de datos de la aplicación y establezca el tiempo para los datos utilizados con frecuencia. Cree un índice en los campos que se utilizan como condiciones de consulta o que deben ordenarse. Por lo tanto, al crear un índice, debe considerar cuidadosamente qué columnas se pueden indexar y. qué columnas no se pueden indexar
Reglas de creación:
La clave primaria y la clave externa de la tabla deben tener índices;
Las tablas con más de 300 datos deben. tener índices;
Para aquellos que interactúan a menudo con otras tablas, las tablas conectadas deben indexarse en los campos de conexión;
Los campos que aparecen con frecuencia en la cláusula Where, especialmente los campos en tablas grandes, deben estar indexados;
Los índices deben crearse en campos altamente selectivos;
Los índices deben crearse en campos pequeños y no indexar campos de texto grandes ni campos muy largos;
p>
El establecimiento de índices compuestos requiere un análisis cuidadoso; intente considerar el uso de un índice de campo único en su lugar.
No cree demasiados índices para tablas con operaciones de datos frecuentes;
Elimine índices inútiles para evitar un impacto negativo en el plan de implementación;
Cosas a tener en cuenta al crear índices:
Limitar el número de índices en la tabla para tablas con un gran número. de operaciones de actualización, el número de índices creados generalmente no debe exceder 3 y el número máximo no debe ser más de 3. Más de 5. Aunque los índices mejoran la velocidad de acceso, demasiados índices afectarán las operaciones de actualización de datos
<. p>Evite crear índices para campos cuyos valores aumentan en una dirección (por ejemplo, campos de tipo fecha para índices compuestos, evite colocar este tipo de campo al frente). , el índice se establece en función de la frecuencia con la que aparecen los campos en las condiciones de consultaEliminar o dejar de utilizar índices raramente utilizados
4.
El ácido representa la atomicidad, la consistencia, el aislamiento y la durabilidad que debe tener un buen sistema de procesamiento de transacciones. Las siguientes características estándar:
Atomicidad
Las transacciones deben considerarse como. unidades mínimas de trabajo indivisibles. Todas las operaciones en toda la transacción deben confirmarse con éxito o no pueden revertirse. Para una transacción, es imposible realizar solo una parte de la transacción. >
El registro de deshacer se llama registro de reversión, que es la clave para lograr la atomicidad. Cuando se revierte una transacción, puede deshacer todas las declaraciones SQL que se han ejecutado con éxito y necesita registrar la información de registro correspondiente que desea revertir.
Consistencia (Consistency)
La base de datos siempre cambia de un estado consistente a otro. (En el ejemplo anterior, la coherencia garantiza que incluso si el sistema falla entre la ejecución del tercer y cuarto extracto, no se perderán $200 en la cuenta corriente porque los cambios realizados en la transacción no se confirmaron al final. No se guardaron en base de datos)
La base de datos garantiza la coherencia a través de la atomicidad, el aislamiento y la durabilidad.
Aislamiento (Isolation)
En términos generales, los cambios realizados por una empresa no son visibles para otras transacciones hasta que finalmente se confirman.
(En el ejemplo anterior, cuando se ejecutó el tercer estado de cuenta sin iniciar el cuarto estado de cuenta, otro programa de resumen de cuenta comenzó a ejecutarse en ese momento y vio que el saldo de la cuenta corriente no disminuyó en $200).
Utilice cerraduras y mecanismos MVCC. MVCC, es decir, control de concurrencia de múltiples versiones, registra datos con datos de instantáneas de múltiples pares de versiones en una línea, y estos datos de instantáneas están en el registro de deshacer. Si una transacción lee una fila que se está sometiendo a una operación de eliminación o actualización, la operación de lectura no espera a que se libere el bloqueo de la fila, sino que lee la versión instantánea de la fila.
Durabilidad (Durability)
Después de confirmar una transacción, sus modificaciones se guardan permanentemente en la base de datos. (Incluso si el sistema falla en este momento, los datos modificados no se perderán. La persistencia es un concepto vago porque en realidad hay muchos niveles diferentes de persistencia. Algunas estrategias de persistencia pueden proporcionar una seguridad muy sólida, mientras que otras no, y es imposible tener alguna estrategia que pueda lograr una garantía de durabilidad del 100%)
Es utilizar el registro de rehacer de Innodb. Cuando se modifican datos, no solo se operan en la memoria, sino que también se registran en el registro de rehacer. Cuando se confirma una transacción, el registro de rehacer se vacía (parte del registro de rehacer está en la memoria y parte en el disco). Cuando la base de datos se cierra y se reinicia, el contenido del registro de deshacer se restaurará en la base de datos y luego los datos se revertirán o confirmarán según el contenido del registro de deshacer y del binlog. El tamaño del registro de rehacer es pequeño y el vaciado del disco es rápido. Los registros de rehacer siempre se añaden al final y pertenecen a la secuencia IO. La eficiencia es obviamente más rápida que la IO aleatoria.
5.5. Principios y ventajas de redis
Redis es un sistema de almacenamiento de valores clave. Al igual que Memcached, admite más tipos de valores almacenados, incluida cadena (cadena), lista (lista vinculada), conjunto (conjunto), zset (conjunto ordenado - conjunto ordenado) y hashes (tipo hash).
Estos tipos de datos admiten push/pop, add/remove, intersecciones de unión y diferencia, y operaciones más ricas, y todas estas operaciones son operaciones atómicas.
Sobre esta base, Redis admite diferentes formas de clasificación. Al igual que Memcached, los datos se almacenan en caché en la memoria para garantizar la eficiencia. La diferencia es que redis escribirá periódicamente datos actualizados en el disco o modificará archivos de registro adicionales y logrará la sincronización maestro-esclavo sobre esta base.
Ventajas de Redis:
Rendimiento extremadamente alto: Redis puede admitir frecuencias de lectura y escritura de más de 100 000 por segundo.
Tipos de datos enriquecidos: Redis admite operaciones de tipos de datos binarios, como cadenas, listas, hashes, conjuntos y conjuntos ordenados.
átomos: todas las operaciones de Redis son atómicas y Redis también admite la ejecución atómica después de combinar todas las operaciones.
Funciones enriquecidas: Redis también admite publicación/suscripción, notificación, caducidad de claves y otras funciones.
6. Dispositivo de bloqueo de la puerta nº 6. Base de datos relacional
Mysql utiliza muchos de estos mecanismos de bloqueo, como bloqueos de fila, bloqueos de tabla, bloqueos de lectura, bloqueos de escritura, etc. , todos los cuales están bloqueados antes de la operación. Estos bloqueos se denominan colectivamente bloqueos pesimistas.
El mecanismo de bloqueo de MySQL es relativamente simple y su característica más notable es que diferentes motores de almacenamiento admiten diferentes mecanismos de bloqueo. Por ejemplo, MyISAM y los motores de almacenamiento en memoria usan bloqueo a nivel de tabla; el motor de almacenamiento BDB usa bloqueo a nivel de página, pero también admite bloqueo a nivel de tabla. El motor de almacenamiento InnoDB admite tanto el bloqueo a nivel de fila como el bloqueo a nivel de tabla, pero el bloqueo a nivel de fila se utiliza de forma predeterminada.
Bloqueo a nivel de tabla: baja sobrecarga y bloqueo rápido; sin interbloqueos; gran granularidad de bloqueo, la mayor probabilidad de conflicto de bloqueo y la menor concurrencia.
Bloqueo a nivel de fila: alta sobrecarga y bloqueo lento; la granularidad del bloqueo es la más pequeña, la probabilidad de conflicto de bloqueo es la más baja y la concurrencia es la más alta.
Bloqueo de página: la sobrecarga y el tiempo de bloqueo se producen entre bloqueos de tabla y bloqueos de fila; la granularidad del bloqueo se produce entre bloqueos de tabla y bloqueos de fila, y la concurrencia es promedio.
A partir de las características anteriores, es difícil decir qué cerradura es mejor en general, ¡solo qué cerradura es más adecuada en términos de las características de aplicaciones específicas! Solo desde una perspectiva de bloqueo: los bloqueos a nivel de tabla son más adecuados para aplicaciones que se centran en consultas y solo actualizan una pequeña cantidad de datos en función de las condiciones del índice, como las aplicaciones web, los bloqueos a nivel de fila son más adecuados para aplicaciones que actualizan un objeto simultáneamente; gran cantidad de datos diferentes según las condiciones del índice y aplicaciones con consultas simultáneas, como algunos sistemas de procesamiento de transacciones en línea (OLTP).
Efectividad del 7.7. ABC Union Index
Para índices compuestos: Mysql usa los campos en el índice de izquierda a derecha. Una consulta sólo puede utilizar parte del índice, pero sólo la parte más a la izquierda. Por ejemplo, el índice es el índice clave (a, b, c). Puede admitir tres combinaciones de A | A, B | A, B y C, pero no B y C. Los índices funcionan muy bien cuando el campo más a la izquierda es una referencia constante.
Para índices compuestos: Mysql usa los campos del índice de izquierda a derecha. Una consulta sólo puede utilizar parte del índice, pero sólo la parte más a la izquierda. Por ejemplo, el índice es el índice clave (a, b, c). Puede admitir tres combinaciones de A | A, B | A, B y C, pero no B y C. Los índices funcionan muy bien cuando el campo más a la izquierda es una referencia constante.