Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/12/2014, 05:57
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: renumerar registros secuencialmente

REnumerar registros donde el campo a renumerar es PK se puede considerar como una de las peores prácticas, innnecesaria, e irrelevante.
Más allá de que quede "bonito", carece completamente de utilidad, y si lo que quieres es que en pantalla la tabla aparezca numerada de ese modo, hay modos mucho más eficientes para eso que no impliquen realizar tareas nocivas para la base.

Destaco esto porque un índice que es PK es un indice clúster, el cual tiene ciertas características que serían impactadas por esa accion de renumerado (ver manual de referencia).
Cita:
Índices agrupados y no agrupados descritos
Un índice es una estructura de disco asociada con una tabla o una vista que acelera la recuperación de filas de la tabla o de la vista. Un índice contiene claves generadas a partir de una o varias columnas de la tabla o la vista. Dichas claves están almacenadas en una estructura (árbol b) que permite que SQL Server busque de forma rápida y eficiente la fila o filas asociadas a los valores de cada clave.

(...)

Agrupado

Los índices clúster ordenan y almacenan las filas de los datos de la tabla o vista de acuerdo con los valores de la clave del índice. Son columnas incluidas en la definición del índice. Solo puede haber un índice clúster por cada tabla, porque las filas de datos solo pueden estar ordenadas de una forma.

La única ocasión en la que las filas de datos de una tabla están ordenadas es cuando la tabla contiene un índice clúster. Cuando una tabla tiene un índice clúster, la tabla se denomina tabla agrupada. Si una tabla no tiene un índice clúster, sus filas de datos están almacenadas en una estructura sin ordenar denominada montón.
Una de las consecuencias es que ese indice mantiene el orden físico de los registros en la tabla, con lo que renumerar implica reordenar los registros en la tabla físicamente, y esto quiere decir que cada vez que renumeres debería reescribirse la tabla.
¿Te parece que tiene sentido hacer eso sólo para que aparezcan "lindos" en pantalla?
¿REordenarías los libros de una biblioteca cada vez que agregas o sacas uno? No, seguro que no. Nadie lo hace, simplemente los mantienes ordenados por otras regferencias, y ESO es lo que conviene hacer con las tablas.

Los "huecos" numericos son irrelevantes, porque el sentido de una PK es la identificación unívoca del registro, lograda por su unicidad.

Ahora bien, si ese campo no es PK, la cosa cambia y dependerá de lo útil que sea realizar esa renumeracion... Pero para eso deberíamos primero saber por qué necesitas renumerarlo.
Hacer tareas para que en la base queden "bonitos" los datos no es algo que se necesite, y toda acción innecesaria en una base es por definición antiperformante.
Si yo les pidiese una tarea así a los de Adm. de BBDD de la empresa para la que trabajo, primero me ignorarían, y si insisto obtendría como mínimno una respuesta... grosera, antes de que me respondan "NO".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)