Principio de almacenamiento del índice de bits
El índice de mapa de bits almacena cada valor clave de la columna de la tabla de datos como un mapa de bits. Oracle tiene una generación de datos diferente para diferentes versiones y diferentes métodos de operación.
Para 8i y 9i,<. /p>
A continuación se analiza la inserción de datos de tres maneras:
a. Inserte una fila a la vez y, después de insertar varias filas, envíela de una vez;
b. Enviar una vez por cada fila insertada;
c. Enviar una vez para la inserción por lotes
Para el primer método, observe los cambios en el índice del mapa de bits. p>
a. Supongamos que se insertan 8 filas de datos con el mismo valor clave. Si cada fila se inserta y luego se envía una vez, se generarán 8 mapas de bits
SQLgt; registro (Id, No, número, ejecutor) Valores (1, 'G000001', 1, 'Zhang 1');
1 fila insertada
SQLgt;
p >1 fila insertada
SQLgt;
1 fila insertada
SQLgt /
1 fila insertada
p >
SQLgt; /
1 fila insertada
SQLgt;
1 fila insertada
SQLgt; p >
1 fila insertada
SQLgt; /
1 fila insertada
SQLgt;
Commitción completa
p >
SQLgt; alterar el archivo de datos de volcado del sistema 1 bloque 40028;
Sistema alterado
fila#0[7847] indicador: -----, bloqueo: 0 p >
col 0; len 3; (3): d5 c5 31 --Valor clave 'Zhang 1'
len 6; (6): 00 40 9c 54 00 00 - - La posición inicial de rowid
col 2; len 6; (6): 00 40 9c 54 00 07 --La posición final de rowid
col 3; 2) : c8 ff -- codificación de mapa de bits
fila#1[7802] bandera: -----, bloqueo: 0
col 0; d5 c5 31
col 1; (6): 00 40 9c 54 00 0f< / p>
col 3; len 2; (2): c8 03
fila#2[7780] bandera: -----, bloqueo: 0
col 0 ; len 3; (3): d5 c5 32
len 6; (6): 00 40 9c 54 00 08
len 6; ) : 00 40 9c 54 00 0f
col 3; len 1; (1): 02
fila#3[7758] bandera: -----, bloqueo: 0
col 0;
c5 33
col 1; len 6; (6): 00 40 9c 54 00 0f
p>
col 3; len 1; (1): 03
fila#4[7736] bandera: -----, bloqueo: 2
col 0; len 3; (3): d5 c5 34
col 1; len 6; (6): 00 40 9c 54 00 08
len 6; 00 40 9c 54 00 0f
col 3; len 1; (1): 04
fila#5[7714] bandera: -----, bloqueo: 2 p>
col 0; len 3; (3): d5 c5 35
col 2; ; len 6; (6): 00 40 9c 54 00 0f
col 3; (1): 05
----- final del volcado del bloque de hojas - ----
Sin embargo, la próxima vez que inserte una fila de datos con el mismo valor clave, estas 8 filas de mapas de bits se fusionarán automáticamente en una fila de mapas de bits y se creará una nueva fila de mapa de bits de índice. se generará para almacenar los datos recién insertados. Índice de fila:
SQLgt; Insertar en el registro de registro del paciente H (Id, No, número, ejecutor) Valores (1, 'G000001', 1, 'Zhang 1');
1 fila insertada
SQLgt; commit;
Commit completo
SQLgt; alterar el archivo de datos de volcado del sistema 1 bloque 40028 ;
Sistema alterado
fila#0[7847] bandera: -----, bloqueo: 2
col 0; : d5 c5 31
col 1; (6): 00 40 9c 54 00 07;
col 3; len 2; (2): c8 ff
fila#1[7825] bandera: -----, bloqueo: 2
col 0; len 3; (3): d5 c5 31
len 6; (6): 00 40 9c 54 00 08
len 6; 6): 00 40 9c 54 00 0f
col 3; len 1; (1): 00
----- final del volcado del bloque de hojas -----
b. El método para enviar cada fila de datos es similar a la situación anterior, pero hay una diferencia. Cada vez que se envía una fila, se copia el mapa de bits original, se genera un nuevo mapa de bits y se envía. El mapa de bits original se marca como eliminado.
Mapas de bits marcados como eliminados Solo cuando el bloque de índice necesita asignar un nuevo mapa de bits, los mapas de bits marcados como eliminados se borrarán y estos espacios se reutilizarán.
Resultados de experimentos en 8i y 9i, con ITPUB;optimización del rendimiento de la base de datos Oracle>
; Consistente con 378 páginas de un libro.
Si se insertan 1000 datos con el mismo valor clave, se generarán 125 filas de mapa de bits que incluyen 8 registros.
c. método, insertar datos en lotes, insertar en el registro de registro del paciente H (Id, No, número, ejecutor) seleccionar el método ***,
Para el mismo valor clave, el mapa de bits solo se genera una vez, y allí es solo un mapa de bits
SQLgt; Insertar en el registro de paciente H (Id, No, número, ejecutor)
Seleccione 1, 'G000001', 1, 'Zhang 1' de. dual
p>
Unión Todo
Seleccione 2,'G000002',1,'Zhang 1' De dual
Unión Todo
Seleccione 3, 'G000003', 1, 'Zhang 1' de dual
Unir todo
Seleccione 4, 'G000004', 1, 'Zhang 1' de dual
Unir todo
Seleccionar 5, 'G000005', 1, 'Zhang 1' De dual
Unir todo
Seleccionar 6, ' G000006', 1, 'Zhang 1' ' De dual
Unión Todo
Seleccione 7, 'G000006', 1, 'Zhang 1' De dual
Unión Todo
Seleccione 8, 'G000006', 1, 'Zhang 1' Desde dual
Unión Todo
Seleccione 9, 'G000006', 1, ' Zhang 1' de dual;
SQLgt; confirmación;
Confirmación completa
SQLgt; alterar el archivo de datos de volcado del sistema 1 bloque 40028;
Sistema alterado
fila#0[8006] bandera: -----, bloqueo: 2
col len 3; (3): d5 c5 31
col 1; longitud 6; (6): 00 40 9c 54 00 00
col 2; 3; len 3; (3): c9 ff 01
fila#1[8030] bandera: ---D-, bloqueo: 2
col 0; >
col 1; NULL
col 2; NULL
col 3; NULL
----- fin del volcado del bloque de hoja --- --
Por lo tanto, es mejor utilizar el método de inserción por lotes para índices de mapas de bits, de modo que solo se genere un mapa de bits para cada valor clave. En el método de inserción de datos de una sola fila, se generará cada valor clave. un mapa de bits por cada 8 filas de datos.
El caso 10G es mucho más simple.
En los tres métodos anteriores, la inserción del mismo valor clave y la generación del mapa de bits son Lo mismo solo hay un mapa de bits, y cada vez que se envía, no. El mapa de bits anterior se eliminará y el mapa de bits correspondiente al valor clave se modificará directamente.
Inserte una fila de datos. cada vez y enviar después de insertar 9 filas
fila#0[7763] bandera: ------, bloqueo: 2, len=29
>
col 0; len 3; (3): d5 c5 31
col 1; (6): 00 00 00 00 00 00
col 2; len 6; (6): 00 40 ef f2 00 0f
col 3; len 8; (8): f9 e4 d5 dc bc 01 ff 01
----- volcado de bloque de fin de hoja -----
Inserte 9 filas de datos en lotes y envíe
fila#0[7733] bandera: ------, bloquear: 2 , len=30
col 0; len 3; (3): d5 c5 31
len 6; (6): 00 00 00 00 00 00 p >
col 2; len 6; (6): 00 40 ef f2 00 17
col 3; (9): fa e4 d5 dc bc 01 ff ff 03
----- final del volcado del bloque de hoja -----
Se puede ver que 10G optimiza el almacenamiento de índices de mapa de bits. Un valor clave tiene solo un bit en el bloque de índice. Figura
Tenga en cuenta que algunas de las conclusiones no son completamente correctas y pueden probarse mediante sus propios experimentos. Además, los experimentos involucrados en este artículo no indican que las diferentes versiones tendrán resultados diferentes. .