Cómo mejorar el uso de los índices de mapas de bits de Oracle
El índice de mapa de bits es un valor atípico entre los índices de bases de datos de Oralce, que tiene un rendimiento sobresaliente en algunas ocasiones especiales. En términos generales, el efecto de un índice de mapa de bits está directamente relacionado con la cardinalidad de la columna. Por esta razón, cuando se habla de cómo mejorar el efecto de uso del índice de mapa de bits, a menudo se relaciona con la cardinalidad de esta columna. Para hacer esto, debe tener una comprensión clara de la cardinalidad de esta columna.
1. ¿Cuándo utilizar el índice de mapa de bits?
La cardinalidad se refiere al número de valores únicos que puede tener una columna. Por ejemplo, una tabla de información para ciudadanos de la República Popular China contiene más de mil millones de registros. Sin embargo, entre estos registros, hay varias columnas especiales que contienen algunos valores repetidos limitados. Por ejemplo, el campo género tiene solo dos valores posibles: masculino y femenino por ejemplo, solo hay 56 valores únicos en la columna étnica, por ejemplo, en la columna de lugar de origen, solo hay 34 provincias, municipios, y regiones autónomas de China.
A veces, es posible que los usuarios necesiten consultar datos relacionados en función de estas columnas. Por ejemplo, cuando la empresa realiza actividades, es posible que necesite confirmar si las actividades involucran tabúes religiosos. Si puede involucrar tabúes hui, entonces es necesario verificar el sistema de información de los empleados para ver si hay empleados hui en la empresa. Por ejemplo, la empresa puede ofrecer ciertos beneficios a las empleadas en el Día de la Mujer. Para ello, también es necesario extraer la lista de empleadas en la base de datos. En este momento, los datos se consultan según el campo de género. etc. Si la base de la columna que consulta el usuario es muy pequeña, solo hay unos pocos valores fijos, como género, etnia, región administrativa, etc. Cuando desee crear índices para estas columnas con valores de cardinalidad relativamente pequeños, deberá crear un índice de mapa de bits. Si existe un estándar específico, creo que si el valor base está dentro del 2% de todo el registro de la tabla o el valor repetido del contenido del campo es más de 100 veces, entonces el índice de mapa de bits puede lograr buenos resultados.
En la mayoría de los casos, el valor base se utiliza para determinar si es necesario utilizar un índice de mapa de bits. Pero hay otra situación especial. Quizás el valor cardinal de esta columna sea muy grande, lo que significa que la repetibilidad de los valores en esta columna no es muy alta. Pero siempre que se cumplan ciertas condiciones, crear un índice de mapa de bits en este campo también puede dar buenos resultados. En términos generales, si el campo se usa con frecuencia en la declaración condicional de consulta Where y el operador utilizado es AND
o el símbolo del operador lógico OR, entonces el efecto es mucho mejor que el de otros índices recomendados.
2. Establezca las columnas que deben indexarse en mapa de bits en un tipo de datos de longitud fija.
En la base de datos Oracle, los tipos de datos generalmente incluyen tipos de datos de longitud fija y tipos de datos de longitud variable. Por ejemplo, tomando datos de caracteres, existen tipos de cadenas de longitud fija (char) y tipos de cadenas de longitud variable (VARCHAR2
). Ambos tipos de datos son tipos de datos de cadena y su diferencia radica principalmente en el control de la longitud de la cadena. CHAR almacena cadenas de longitud fija. Si la cadena almacenada real no alcanza su valor máximo especificado, el sistema de base de datos agregará automáticamente espacios al final. VARCHAR2 se utiliza principalmente para almacenar tipos de datos de caracteres de longitud variable. Si el tipo de cadena CHAR de longitud fija es diferente, si los datos almacenados en esta columna no alcanzan el valor máximo especificado,
el sistema de base de datos no agregará espacios al final y los almacenará como una cadena real. . Si nos fijamos en el tamaño de la base de datos, los tipos de datos de longitud variable son definitivamente mejores.
Pero desde la perspectiva del efecto del índice de mapa de bits, es mejor configurar la columna para establecer el índice de mapa de bits en un tipo de datos de longitud fija. Debido a que los índices de mapas de bits utilizan tipos de datos de longitud fija, su rendimiento es más superior que los tipos de datos de longitud variable. En otras palabras, si desea crear un índice de mapa de bits en una columna de tipo de caracteres, es mejor configurar el tipo de datos de esta columna en char (incluso si su longitud de almacenamiento real es diferente), en lugar de configurar NVCHAR2 adicional. Porque en relación con la mejora del rendimiento, esta pérdida de espacio todavía vale la pena.
Además, también podemos utilizar otros medios para garantizar la coherencia de la longitud de la memoria almacenada en la columna. Tomemos como ejemplo las regiones administrativas de China. La mayoría de las regiones administrativas tienen solo 3 caracteres, como la provincia de Zhejiang, pero las más largas tienen 8 caracteres, como la Región Autónoma Uigur de Xinjiang.
Si hay muchos registros, de hecho se generará una gran cantidad de desperdicio cuando se acumulen. En este caso, la gestión de bases de datos puede adoptar algunos métodos de compromiso al diseñar. Por ejemplo, utilice abreviaturas para representar los nombres de cada provincia. Otra forma es utilizar números para representar provincias durante el almacenamiento y luego establecer una correspondencia entre números y provincias en otra tabla. El autor recomienda el último método.
En resumen, si desea crear un índice de mapa de bits para una determinada columna, será mejor que el administrador de la base de datos encuentre formas de hacer que este campo utilice un tipo de datos de longitud fija, a veces incluso a expensas de un poco de tiempo. espacio de almacenamiento.
3. Restricciones en el uso de índices de mapas de bits.
Aunque los índices de mapa de bits pueden mejorar significativamente el rendimiento de las consultas de la base de datos cuando la cardinalidad es relativamente pequeña o cuando se utilizan operadores lógicos, todavía existen muchas limitaciones a la hora de utilizarlos. Los administradores de bases de datos deben ser conscientes de estas limitaciones para no equivocarse al diseñar la base de datos.
Si un campo se establece como índice de mapa de bits, es mejor utilizar un tipo de datos de longitud fija. Al mismo tiempo, esta longitud tiene un límite máximo. En la última versión de la base de datos Oracle, la longitud máxima de este índice de mapa de bits no puede exceder 30. No sé si este límite de longitud se relajará en futuras versiones. Por ejemplo, un índice de mapa de bits no se puede declarar como índice único; por ejemplo, un índice de mapa de bits no contiene datos de columna y no se puede utilizar para ningún tipo de verificación de integridad, por ejemplo, al ejecutar ALTER
; Declaración TABLE y modificación del contenedor. Esto invalida el índice de mapa de bits cuando hay columnas indexadas en mapas de bits.
La limitación más importante es que el optimizador basado en reglas no considera índices de mapas de bits. Antes de que el sistema de base de datos Oracle ejecute un SQL, primero debe analizar el plan de ejecución de la declaración y luego ejecutarlo de acuerdo con el plan de ejecución. El trabajo de analizar el plan de ejecución de una declaración lo realiza el optimizador. El optimizador de Oracle tiene dos métodos de optimización, a saber, optimización basada en reglas y optimización basada en costos. La optimización basada en reglas significa que el optimizador sigue algunas reglas predeterminadas dentro de Oracle al analizar declaraciones SQL. La optimización basada en costos analiza el costo de ejecución de las declaraciones. El costo aquí se refiere principalmente a CPU y memoria. Cuando el optimizador determina si utilizar este método, se refiere principalmente a la información estadística de tablas e índices. Las estadísticas brindan información sobre el tamaño de la tabla, cuántas filas tiene, la longitud de cada fila, etc. Luego, el sistema de base de datos utilizará esta información para determinar si es necesario utilizar este método de optimización. También existen optimizadores derivados de estos dos modos de optimización.
En resumen, una cosa que los administradores de bases de datos deben dejar claro es que si se van a utilizar índices de mapa de bits, es mejor seleccionar el modo de optimización basado en costos para el optimizador de la base de datos. Porque si la base de datos utiliza el modo optimizador basado en reglas, se ignorarán los índices de mapas de bits. Entonces el índice de mapa de bits creado por el administrador de la base de datos será inútil en este momento. Es posible que la mayoría de los administradores de bases de datos no sepan esto, por lo que deben aprender de ello.
4. Fusionar múltiples índices de mapas de bits en la misma consulta.
Por lo general, después de fusionar varios índices de mapas de bits en la misma consulta, el rendimiento de la consulta de la base de datos se puede mejorar significativamente. Es decir, por ejemplo, en la tabla de información del empleado, hay campos como género, estado civil y título profesional. Estos campos son campos de cardinalidad relativamente baja y se pueden utilizar para crear índices de mapas de bits. Si el usuario ahora realiza una consulta, debe consultar la información de los empleados según los tres campos anteriores. Por ejemplo, si necesita encontrar información de empleados cuyo género es femenino, su estado civil es casado y su puesto de trabajo es de nivel de gerente. o superior, organice una fiesta en casa para ellos. En este momento, estos tres campos de índice de mapa de bits deben usarse en las condiciones de consulta. Cuando la base de datos ejecuta el plan de consulta, si la cláusula Where contiene estos campos de índice de mapa de bits, el optimizador utilizará tres índices de mapa de bits separados en secuencia. Cada mapa de bits registra un puntero que indica qué filas de la tabla contienen valores conocidos en el mapa de bits. Con esta importante información a mano, la base de datos realiza una operación AND de mapa de bits y devuelve qué filas pertenecen a los cuatro mapas de bits. Estos valores luego se convierten en valores ROWID y la consulta continúa con el procesamiento restante (consultando otra información basada en el valor ROWID).
En otras palabras, si se utilizan varios índices de mapa de bits para realizar consultas en una declaración de condición de consulta, el efecto de la consulta será 1+1>2.
Por esta razón, en el diseño de aplicaciones, algunos campos de índice de mapa de bits se pueden colocar en la ventana de consulta como condiciones de consulta, lo que permite a los usuarios seleccionar las condiciones de consulta de forma explícita. Esto puede ser de gran ayuda para mejorar el rendimiento de las consultas de su aplicación.
Una tabla en la base de datos Oracle puede soportar hasta 30 índices de mapa de bits. Por supuesto, muchos de ellos no suelen utilizarse en el trabajo real. Porque, por lo general, solo se pueden lograr mejores resultados utilizando este índice de mapa de bits en una columna con un valor base relativamente pequeño. Por el contrario, si utiliza índices de mapa de bits en algunas columnas con valores de cardinalidad relativamente grandes, tendrá el efecto contrario. En una tabla, el valor pequeño de la columna cardinal no será muy grande. Por lo tanto, los administradores de bases de datos deben prestar más atención a los valores más pequeños de estas columnas cardinales. Si los usuarios tienen la costumbre de consultar estas columnas con valores de cardinalidad pequeños, el administrador de la base de datos no puede ser tacaño y establecer estas columnas como índices de mapa de bits inmediatamente. Y al diseñar consultas, es mejor combinar varios índices de mapas de bits en la misma consulta para mejorar el rendimiento de la consulta.