sql >> Base de Datos >  >> RDS >> Oracle

¿La columna incrementada hace que el índice b-tree en la columna esté desequilibrado?

Oracle Los índices de nunca están "desequilibrados":cada hoja en el índice está a la misma profundidad que cualquier otra hoja.

Ninguna división de página introduce un nuevo nivel por sí mismo:una página de hoja no se convierte en padre para nuevas páginas como lo sería en un árbol que no se equilibra automáticamente.

En su lugar, se crea un hermano para la página dividida y el nuevo registro (más posiblemente algunos de los registros de la página anterior) van a la nueva página. Se agrega un puntero a la nueva página al padre.

Si la página principal tampoco tiene espacio (no puede aceptar el puntero a la página hoja recién creada), también se divide, y así sucesivamente.

Estas divisiones pueden propagarse hasta la página raíz, cuya división es lo único que aumenta la profundidad del índice (y lo hace para todas las páginas a la vez).

Las páginas de índice también se organizan en listas de doble enlace, cada lista en su propio nivel. Esto sería imposible si el árbol estuviera desequilibrado.

Si master_id se incrementa automáticamente, esto significa que todas las divisiones se producen al final (por ejemplo, 90/10 splits) que hace posible el índice más denso.

No, no lo haría, por las razones anteriores.

Si te unes a slave a master a menudo, puede considerar crear un CLUSTER de las dos tablas, indexadas por master_id . Esto significa que los registros de ambas tablas, compartiendo el mismo master_id , vaya a las mismas páginas de datos o a una cercana, lo que hace que una unión entre ellas sea muy rápida.

Cuando el motor encontró un registro de master , con un índice o lo que sea, esto también significa que ya ha encontrado los registros de slave para unirse con ese master . Y viceversa, localizando un slave también significa localizar su master .