|
Bloqueo de tabla detalle sin indice al borrar registro maestro |
|
|
Índices en Foreign keys
Todo se reduce a que, si NO hay índice en la tabla hija, al borrar el maestro o al modificar los campos de la pk del maestro, además del bloqueo de ROW-X en la fila del maestro, se produce un bloqueo Share en la TABLA hija, con lo que cualquier modificación / inserción / borrado en la hija se queda bloquedo hasta que termine el borrado o modificación de la maestra.
Si existe un índice normal en los campos de la foreign key de la tabla hija, oracle lo utiliza para comprobar si el registro borrado o modificado de la tabla maestra tiene hijos y ya no se produce el bloqueo Share en la tabla hija.
Si el índice sobre los campos de la foreign es bitmap, no funciona y sigue generándose el bloqueo Share en la tabla hija.
Si el índice es más completo, o mejor dicho, es más restrictivo que los campos que forman la foreign key también vale para que no haya Shared lock. Es decir, que si mi foreign key está formada por los campos (c01, c02) y ya tengo un índice por (c01, c02, c03) no hace falta que cree el índice para solo (c01, c02) ya que Oracle usará sin problemas el otro para evitar el Shared lock.
|
|
Última modificación ( 06.11.2009 )
|