Hola Alberto:

2016-06-23 6:47 GMT+02:00 Alberto Cuevas <betocuevas....@gmail.com>:
> Por lo que he leído los Indices me sirven para que la búsqueda sea mas
> rápida.

Basicamente, y en ocasiones se usan para implementar unicidad.


> Tengo una tabla (por dar un ejemplo) que tiene un PK y 2 FK
> CREATE TABLE cliente (
>   id_cliente INTEGER NOT NULL (PK)
>   id_sucursal INTEGER NOT NULL (FK)
>   id_documento INTEGER NOT NULL (FK)
>
> Mi pregunta es cuando se crea en una tabla los campos Primary Key y Foreign
> Key estos por defecto ya son Indices? o debo de crearlos independientemente?

Eso de (pk) no es sql  ( otra cosa seria '-- (pk)' ), con lo que
sospecho que no es la sentencia original. En general cualquier duda
que tengas sera mejor resuelta si pones el codigo real que usas, con
algun trozo anonimizado si es secreto .


Normalmente lo que sueles hacer es "id_cliente INTEGER PRIMARY KEY".
Primary key se traduce, entre otras cosas, por "unique not null", y
unique hace que se te cree un indice, para que el servidor pueda
detectar duplicados sin leer toda la tabla. Ademas al hacer primary
key el servidor ya sabe a donde apuntan los foreign keys que declares
en otras tablas sin mas que dar el nombre de tabla referenciada. Y si
usas foreign key en las relaciones de ese tipo la gente que lea tu sql
sabra lo que quieres hacer.

> De ser la respuesta no entonces debo crear 2 indices para id_sucursal  y
> id_documento?

Las foreign key no te las indexa por defecto. La razon es que no le
hace falta, y puede que tu solo las uses en la direccion fk->pk, con
lo que indexarlas seria una perdida de tiempo. Si las usas en la
direccion inversa, lo que es muy habitual, conviene que las indexes a
mano tras crear la tabla ( direccion inversa, pk->fk es p.e. cuando
haces cosas como 'on delete cascade/set null' o 'select c.* from
cliente c, sucursal s where s.id_sucursal = c.id_sucursal and
s......).

En general depende de tus 'use pattern'. Para tus nombres de tabla
tiene toda la pinta de que deberias indexarlas, pero puee que los
llames asi y tengan datos de protones, neutrones y electrones.

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a