Consulta sencilla

16/12/2005 - 20:40 por David Caballero | Informe spam
Hola buenas tardes:

Tengo una tabla de articulos, pregunta sencilla :
Que es mejor tener de primaria key:
1- Dos campos COD_ARTICULO, COD_FAMILIA
2.- Un campo unico COD_ARTICULO (el campo
cod_familia estaria en la tabla tambien)

Mi duda es para posteriormente optimizar el rendimiento en busquedas,
teniendo en cuenta que esa tabla tendra unos 20.000 registros.

Muchas Gracias

Preguntas similare

Leer las respuestas

#1 qwalgrande
16/12/2005 - 20:55 | Informe spam
Hola.

Aunque depende de la forma en la que vayas a explotar luego la información,
lo suyo es que tu clave primaria y también tu índice clustered sea el campo
COD_ARTICULO, indexando, si procede, el otro campo. En todo caso, si va a
ser realmente frecuente buscar por familia, puedes incluirlo en el índice
clustered.

Alberto López Grande (qwalgrande)
"David Caballero" escribió en el mensaje
news:
Hola buenas tardes:

Tengo una tabla de articulos, pregunta sencilla :
Que es mejor tener de primaria key:
1- Dos campos COD_ARTICULO, COD_FAMILIA
2.- Un campo unico COD_ARTICULO (el campo
cod_familia estaria en la tabla tambien)

Mi duda es para posteriormente optimizar el rendimiento en busquedas,
teniendo en cuenta que esa tabla tendra unos 20.000 registros.

Muchas Gracias



Respuesta Responder a este mensaje
#2 Martin Bohlmann
16/12/2005 - 21:06 | Informe spam
La elección de los índices se define a partir de las consultas que harás.
Te recomiendo tener un índice Primary Unique el cuál será único por cada
ROW, entrada.
También recomiendo que esta clave sea Autonumber; así puede ser
multi-usuario y nunca se generen 2 registros iguales; o no se pueda ingresar
el segundo registro por clave duplicada.

El caso de usar un índice múltiple sería productivo si voy a buscar a la
tabla por ambas claves, o bien con la primera.

Ejemplo: índice combinado

Flia Nro Art
A 12456
A 52
A 85
A 39
B 2
B 15
C 55

En tu caso armaría 2 íncides:

Código_Arg PRIMARY UNIQUE AUTONUMBER ASC
Flia ASC

El motor utilizará ambos índices si vas con Flia y Código y utilizará el uno
o el otro.
En el caso de acceder por código (PRIMARY UNIQUE) la lectura será muy veloz.

Espero haberte auxiliado.
Saludos, y buen fin de semana

Martin
Respuesta Responder a este mensaje
#3 Maxi
16/12/2005 - 21:14 | Informe spam
Hola, para mi el primary jey ahi es cod_articulo. Ojo, no siempre un primary
key es un indice Cluster, es mas, se deberia estudiar en cada caso


Salu2
Maxi [MVP SQL SERVER]


"David Caballero" escribió en el mensaje
news:
Hola buenas tardes:

Tengo una tabla de articulos, pregunta sencilla :
Que es mejor tener de primaria key:
1- Dos campos COD_ARTICULO, COD_FAMILIA
2.- Un campo unico COD_ARTICULO (el campo
cod_familia estaria en la tabla tambien)

Mi duda es para posteriormente optimizar el rendimiento en busquedas,
teniendo en cuenta que esa tabla tendra unos 20.000 registros.

Muchas Gracias



Respuesta Responder a este mensaje
#4 David Caballero
16/12/2005 - 21:29 | Informe spam
Muchas gracias por responder:

El tema de los indices se me queda un poco cojo.
Entiendo que el sql server creará algun indice automáticamente al crear
una tabla porque yo nunca he creado ningun indice aunque
todas mis tablas tienen primary key definida, relaciones y en principio
lo que llevo realizando funciona bien.
La preocupacion que tengo ahora es que al tratar ya una base de datos
grande me influya posteriormente el rendimiento.

Se puede cambiar un indice de una tabla ya con resgistros o se definen
los indices al crear la tabla vacía.

Muchas gracias (perdonad mi poca experiencia pero aprendiendo solo
aveces se quedan cosas colgadas)

Sabeis de alguna pagina donde salgan ejemplos practicos de bases de
datos?


"Maxi" escribió en el mensaje
news:
Hola, para mi el primary jey ahi es cod_articulo. Ojo, no siempre un


primary
key es un indice Cluster, es mas, se deberia estudiar en cada caso


Salu2
Maxi [MVP SQL SERVER]


"David Caballero" escribió en el mensaje
news:
> Hola buenas tardes:
>
> Tengo una tabla de articulos, pregunta sencilla :
> Que es mejor tener de primaria key:
> 1- Dos campos COD_ARTICULO, COD_FAMILIA
> 2.- Un campo unico COD_ARTICULO (el campo
> cod_familia estaria en la tabla tambien)
>
> Mi duda es para posteriormente optimizar el rendimiento en busquedas,
> teniendo en cuenta que esa tabla tendra unos 20.000 registros.
>
> Muchas Gracias
>
>
>


Respuesta Responder a este mensaje
#5 Alejandro Mesa
16/12/2005 - 21:34 | Informe spam
David,

Dejame aclarar algo. La clave primaria es una restriccion de tipo conceptual
(parte de la teoria de bases de datos relacionales) y cada tabla debe tener
una independiente de como sql server la implemente. SQL Server 2000 lo hace
creando un indice unico que por defecto es clustered si este no se
especifica. Asi que decirte cual clave primaria escojer sin mas informacion
sobre tu negocio no creo que sea algo adecuado. Que tal si tu compania emite
el mismo cod_articulo para diferentes cod_familia?, en ese caso la clave
primaria esta compuesta por ambas columnas, de lo contrario, creo que el
cod_articulo es suficiente como clave primaria. Ahora, si quieres implementar
la clave primaria mediante el uso de un indice unico clustered o
nonclustered, entonces debes primero analyzar que tipo de quieries estarias
usando contra esa tabla.

El indice clustered debe ser lo mas estrecho posible (cantidad de bytes en
la clave) y casi siempre se escojen columnas las cuales se usan en las
clausulas "order by", "group by" o que se usan en filtros de rangos. Si esta
columna ademas crece monoliticamente (por ejemplo una columna identity)
entonces estarias evitando particionamiento de paginas, pero corres el riesgo
de ocasionar "hot spot" (mucha actividad en una zona especifica del disco) si
el numero de transacciones por segundo supera las 1000. Siempre es bueno que
una tabla tenga un indice clustered y como se puede tener solo 1, entonces
debes escojer las columnas que mas se beneficien de el.

En cambio, los indices nonclustered se usan principalmente para identificar
grupos pequenios de filas (si la clave es unique mejor) y se escojen en
dependencia de los queries, principalmente las columnas que participan en la
clausula "where". Que sql server los use o no, depende de la distribucion de
los valores en las columnas que conforman la clave del indice, el tipo de
expresion que uses en el filtro y el costo asociado al uso de ese indice.

Te recomiendo leas los BOL, asi como los articulos relacionados con indices
que aparecen en este link. Tambien te recomiendo el libro "inside sql server
2000" escrito por Kalen Delaney.

SQL Server Performance Tuning Tips
http://www.sql-server-performance.c...rmance.asp

Microsoft SQL Server 2000 - A Fond
http://www.amazon.com/gp/product/844813155X/qid34764955/sr=8-2/ref=sr_8_xs_ap_i2_xgl14/002-9210940-5312032?nP7846&s=books&v=glance


AMB


"David Caballero" wrote:

Hola buenas tardes:

Tengo una tabla de articulos, pregunta sencilla :
Que es mejor tener de primaria key:
1- Dos campos COD_ARTICULO, COD_FAMILIA
2.- Un campo unico COD_ARTICULO (el campo
cod_familia estaria en la tabla tambien)

Mi duda es para posteriormente optimizar el rendimiento en busquedas,
teniendo en cuenta que esa tabla tendra unos 20.000 registros.

Muchas Gracias




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida