Haber si me he enterado: índice agrupado.

12/04/2005 - 11:59 por Víctor | Informe spam
Veamos si me he enterado sobre los índices agrupados.

Tengo la siguiente tabla (más o menos con 2500000 de registros); esta tabla
indica el estado de ocupación de un barco cada día:

CREATE TABLE [dbo].[ic_numaco] (
[nac_id] [int] IDENTITY (1, 1) NOT NULL ,
[nac_via_codi] [int] NOT NULL:
FK de la tabla de los viajes del barco.

[nac_codaco] [varchar] (3) NOT NULL:
indica la acomodación (puede haber hasta 4 diferentes).

[nac_numero] [smallint] NOT NULL:
el número de la acomodación (camarote 1, camarote 2, butaca 1, butaca 2,
...)

[nac_vacio] [tinyint] NOT NULL:
1: está vacio; 0: no está vacio.

[nac_libres] [smallint] NOT NULL:
Indica el número de plazas libres de la acomodación.

[nac_reservado] [tinyint] NOT NULL:
1: está reservada entera (un pasajero puede reservar para él solo una
camarote de 4 plazas); 0: no

[nac_carga] [tinyint] NOT NULL:
0: sólo se vende para pasaje; 1: sólo se vende para carga; 2: para los
dos.

[nac_orden] [tinyint] NOT NULL:
orden de las acomodaciones del barco para las reservas de carga (primero
se asignar´na las acomodaciones con orden 1, luego con orden 2..., pero
sólo en las reservas de carga).

) ON [PRIMARY]
GO

Tengo un índice agrupado con las columnas nac_via_codi (para agruparlas por
viaje), luego por nac_codaco, y por nac_id (ahora mismo creo que ésta
columna sobraría).

Resulta que al eliminar un registro de la tabla, ésto me dura unos 10
segundos: ¿puede ser por el índice agrupado?

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
12/04/2005 - 12:19 | Informe spam
¿Has probado a ver el plan de ejecución para saber lo que hace el motor
cuando le indicas que elimine un registro? ¿Cómo es la sentencia que le
lanzas? Tampoco indicas cuál es la PK de la tabla, y es probable que el
problema de rendimiento que tienes venga por ahí...




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Víctor" escribió en el mensaje
news:
Veamos si me he enterado sobre los índices agrupados.

Tengo la siguiente tabla (más o menos con 2500000 de registros); esta


tabla
indica el estado de ocupación de un barco cada día:

CREATE TABLE [dbo].[ic_numaco] (
[nac_id] [int] IDENTITY (1, 1) NOT NULL ,
[nac_via_codi] [int] NOT NULL:
FK de la tabla de los viajes del barco.

[nac_codaco] [varchar] (3) NOT NULL:
indica la acomodación (puede haber hasta 4 diferentes).

[nac_numero] [smallint] NOT NULL:
el número de la acomodación (camarote 1, camarote 2, butaca 1, butaca


2,
...)

[nac_vacio] [tinyint] NOT NULL:
1: está vacio; 0: no está vacio.

[nac_libres] [smallint] NOT NULL:
Indica el número de plazas libres de la acomodación.

[nac_reservado] [tinyint] NOT NULL:
1: está reservada entera (un pasajero puede reservar para él solo una
camarote de 4 plazas); 0: no

[nac_carga] [tinyint] NOT NULL:
0: sólo se vende para pasaje; 1: sólo se vende para carga; 2: para los
dos.

[nac_orden] [tinyint] NOT NULL:
orden de las acomodaciones del barco para las reservas de carga


(primero
se asignar´na las acomodaciones con orden 1, luego con orden 2...,


pero
sólo en las reservas de carga).

) ON [PRIMARY]
GO

Tengo un índice agrupado con las columnas nac_via_codi (para agruparlas


por
viaje), luego por nac_codaco, y por nac_id (ahora mismo creo que ésta
columna sobraría).

Resulta que al eliminar un registro de la tabla, ésto me dura unos 10
segundos: ¿puede ser por el índice agrupado?


Respuesta Responder a este mensaje
#2 Víctor
12/04/2005 - 13:04 | Informe spam
Vaya.

La PK es nac_id, y no lanzo ninguna sentencia; es decir, abro el
Administrador, que me muestre los registros, y voy marcando y borrando.

Pero probaré de hacer un delete de uno en el Analizador, haber que dice el
plan.

Otra cosa mariposa: estoy haciendo pruebas sobre esta tabla de cambiar los
índices, y el costo en la tabla varía de 700% a 800%. Me imagino que cuanto
más bajo, mejor, ¿verdad?



"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
¿Has probado a ver el plan de ejecución para saber lo que hace el


motor
cuando le indicas que elimine un registro? ¿Cómo es la sentencia que le
lanzas? Tampoco indicas cuál es la PK de la tabla, y es probable que el
problema de rendimiento que tienes venga por ahí...




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Víctor" escribió en el mensaje
news:
> Veamos si me he enterado sobre los índices agrupados.
>
> Tengo la siguiente tabla (más o menos con 2500000 de registros); esta
tabla
> indica el estado de ocupación de un barco cada día:
>
> CREATE TABLE [dbo].[ic_numaco] (
> [nac_id] [int] IDENTITY (1, 1) NOT NULL ,
> [nac_via_codi] [int] NOT NULL:
> FK de la tabla de los viajes del barco.
>
> [nac_codaco] [varchar] (3) NOT NULL:
> indica la acomodación (puede haber hasta 4 diferentes).
>
> [nac_numero] [smallint] NOT NULL:
> el número de la acomodación (camarote 1, camarote 2, butaca 1,


butaca
2,
> ...)
>
> [nac_vacio] [tinyint] NOT NULL:
> 1: está vacio; 0: no está vacio.
>
> [nac_libres] [smallint] NOT NULL:
> Indica el número de plazas libres de la acomodación.
>
> [nac_reservado] [tinyint] NOT NULL:
> 1: está reservada entera (un pasajero puede reservar para él solo


una
> camarote de 4 plazas); 0: no
>
> [nac_carga] [tinyint] NOT NULL:
> 0: sólo se vende para pasaje; 1: sólo se vende para carga; 2: para


los
> dos.
>
> [nac_orden] [tinyint] NOT NULL:
> orden de las acomodaciones del barco para las reservas de carga
(primero
> se asignar´na las acomodaciones con orden 1, luego con orden 2...,
pero
> sólo en las reservas de carga).
>
> ) ON [PRIMARY]
> GO
>
> Tengo un índice agrupado con las columnas nac_via_codi (para agruparlas
por
> viaje), luego por nac_codaco, y por nac_id (ahora mismo creo que ésta
> columna sobraría).
>
> Resulta que al eliminar un registro de la tabla, ésto me dura unos 10
> segundos: ¿puede ser por el índice agrupado?
>
>


Respuesta Responder a este mensaje
#3 Carlos Sacristán
12/04/2005 - 13:24 | Informe spam
Comentarios en línea...

"Víctor" escribió en el mensaje
news:#
Vaya.

La PK es nac_id, y no lanzo ninguna sentencia; es decir, abro el
Administrador, que me muestre los registros, y voy marcando y borrando.

Pero probaré de hacer un delete de uno en el Analizador, haber que dice el
plan.



ejecución, es la mejor forma

Otra cosa mariposa: estoy haciendo pruebas sobre esta tabla de cambiar los
índices, y el costo en la tabla varía de 700% a 800%. Me imagino que


cuanto
más bajo, mejor, ¿verdad?



cualquier caso, siempre es bueno hacer este tipo de pruebas para encontrar
los índices útiles para la aplicación cliente


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)
Respuesta Responder a este mensaje
#4 Víctor
12/04/2005 - 13:42 | Informe spam
Bueno; no comenté que hay dos tablas con un FK sobre esta (nac_id) (lo acabo
de ver en el plan de ejecución), y me imagino que "algo"deben de
relantilizar.

Lo del "costo": en el plan de ejecución aparacen un montón de símbolos
indicando el costo de CPU, el costo de E/S, el índcie que utiliza... Unos
datos se ven al poner el ratón encima, y otros te los indica en el mismo
diagrama; uno de ellos es el "costo", y me imagino que cuanto más bajo
mejor.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
Comentarios en línea...

"Víctor" escribió en el mensaje
news:#
> Vaya.
>
> La PK es nac_id, y no lanzo ninguna sentencia; es decir, abro el
> Administrador, que me muestre los registros, y voy marcando y borrando.
>
> Pero probaré de hacer un delete de uno en el Analizador, haber que dice


el
> plan.
>
ejecución, es la mejor forma

> Otra cosa mariposa: estoy haciendo pruebas sobre esta tabla de cambiar


los
> índices, y el costo en la tabla varía de 700% a 800%. Me imagino que
cuanto
> más bajo, mejor, ¿verdad?
>
cualquier caso, siempre es bueno hacer este tipo de pruebas para encontrar
los índices útiles para la aplicación cliente


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)


Respuesta Responder a este mensaje
#5 Carlos Sacristán
12/04/2005 - 13:49 | Informe spam
Sí, claro: el motor debe comprobar los tablas relacionadas y saber si
existen datos a los que tenga que aplicar alguna acción. Si esas tablas no
tienen índices útiles para esta operación, el borrado del dato original será
más costoso.

También influyen otras cosas, por ejemplo si existe un trigger de
borrado sobre esa tabla, si la pk sobre la tabla no está declarada y por
tanto no existe el índice sobre el(los) campo(s) a buscar, etc


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Víctor" escribió en el mensaje
news:
Bueno; no comenté que hay dos tablas con un FK sobre esta (nac_id) (lo


acabo
de ver en el plan de ejecución), y me imagino que "algo"deben de
relantilizar.

Lo del "costo": en el plan de ejecución aparacen un montón de símbolos
indicando el costo de CPU, el costo de E/S, el índcie que utiliza... Unos
datos se ven al poner el ratón encima, y otros te los indica en el mismo
diagrama; uno de ellos es el "costo", y me imagino que cuanto más bajo
mejor.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
> Comentarios en línea...
>
> "Víctor" escribió en el mensaje
> news:#
> > Vaya.
> >
> > La PK es nac_id, y no lanzo ninguna sentencia; es decir, abro el
> > Administrador, que me muestre los registros, y voy marcando y


borrando.
> >
> > Pero probaré de hacer un delete de uno en el Analizador, haber que


dice
el
> > plan.
> >
> ejecución, es la mejor forma
>
> > Otra cosa mariposa: estoy haciendo pruebas sobre esta tabla de cambiar
los
> > índices, y el costo en la tabla varía de 700% a 800%. Me imagino que
> cuanto
> > más bajo, mejor, ¿verdad?
> >
> cualquier caso, siempre es bueno hacer este tipo de pruebas para


encontrar
> los índices útiles para la aplicación cliente
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida