Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Consulta Indices en postgres

Estas en el tema de Consulta Indices en postgres en el foro de PostgreSQL en Foros del Web. Hola, estoy testeando postgres para acabar de decidirme a trabajar con ella y quisera por favor si alguien me puede explicar detalladamente la utilización de ...
  #1 (permalink)  
Antiguo 12/12/2008, 09:27
 
Fecha de Ingreso: octubre-2006
Mensajes: 179
Antigüedad: 13 años, 1 mes
Puntos: 3
Consulta Indices en postgres

Hola, estoy testeando postgres para acabar de decidirme a trabajar con ella y quisera por favor si alguien me puede explicar detalladamente la utilización de los indices en postgres, mi ignorancia me hace ver que para consultas sirve igual definir una primary key que un indice (pero no se hacer consultas con ellos). Doy gracias de antemano y sobre todo si me ponen algún ejemplo detallado.
  #2 (permalink)  
Antiguo 14/12/2008, 08:22
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 12 años, 9 meses
Puntos: 13
Respuesta: Consulta Indices en postgres

Cita:
para consultas sirve igual definir una primary key que un indice (pero no se hacer consultas con ellos).
Al crear una PK postgresql automaticamente le crea un indice.
Cuando tu haces una consulta el planificador calcula si es necesario y mejor usar un indice o no, este trabajo suele dejarse al planificador, aunque puedes forzar el uso o no de un indice, pero no creo que lo necesites.
A parte de los indices que crea postgresql (al crear una PK, al definir un campo como UNIQUE), puedes crear indices en los campos que creas necesarios para mejorar el rendimiento de las consultas.

Salu2
  #3 (permalink)  
Antiguo 14/12/2008, 10:31
 
Fecha de Ingreso: octubre-2006
Mensajes: 179
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Consulta Indices en postgres

Gracias por tu respuesta seiko. Me puedes poner algún ejemplo de índice donde se vea su aplicación más que nada por lo que me dices de que se puede poner un índice para el campo que quiera?

Saludos
  #4 (permalink)  
Antiguo 14/12/2008, 18:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 12 años, 9 meses
Puntos: 13
Respuesta: Consulta Indices en postgres

por ejemplo, tienes una tabla personas:
id serial primary key, -- Aqui te crea un indice por ser PK
nombre varchar,
apellidos varchar,
dni varchar UNIQUE, -- Aqui te crea un indice por ser unique
f_nacimiento date

Ahora imagina que buscas sobre las personas preguntando por su fecha de nacimiento, como por ejemplo:
select id from personas where f_nacimiento < '01/01/1990'

Esta select hace un recorrido secuencial, es decir, si tienes 1 millon de personas, tiene que recorrer 1 millon de registros.

CREATE INDEX nombre_indice ON personas (f_nacimiento);
Ahora cuando utilizará el indice para la select anterior, la diferencia de rendimiento es muy notoria.

Salu2
  #5 (permalink)  
Antiguo 14/12/2008, 18:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 12 años, 9 meses
Puntos: 13
Respuesta: Consulta Indices en postgres

una muestra practica:
Código:
pruebas=# create table personas(id serial primary key, nombre varchar, dni integer);
NOTICE:  CREATE TABLE creará una secuencia implícita «personas_id_seq» para la columna serial «personas.id»
NOTICE:  CREATE TABLE / PRIMARY KEY creará el índice implícito «personas_pkey» para la tabla «personas»
CREATE TABLE
pruebas=# insert into personas (nombre, dni) select 'nombre ' || foo, foo from generate_series(1,100000) foo;
INSERT 0 100000
pruebas=# EXPLAIN ANALYZE select * from personas where dni between 2500 AND 5000;
                                                 QUERY PLAN
-------------------------------------------------------------------------------------------------------------
 Seq Scan on personas  (cost=0.00..2133.00 rows=2497 width=20) (actual time=1.425..74.737 rows=2501 loops=1)
   Filter: ((dni >= 2500) AND (dni <= 5000))
 Total runtime: 79.222 ms
(3 rows)

pruebas=# create index idx_dni on personas(dni);
CREATE INDEX
pruebas=# EXPLAIN ANALYZE select * from personas where dni between 2500 AND 5000;
                                                        QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
 Index Scan using idx_dni on personas  (cost=0.00..93.20 rows=2497 width=20) (actual time=0.131..6.596 rows=2501 loops=1)
   Index Cond: ((dni >= 2500) AND (dni <= 5000))
 Total runtime: 10.985 ms
(3 rows)
Salu2
  #6 (permalink)  
Antiguo 08/01/2009, 16:36
 
Fecha de Ingreso: octubre-2007
Mensajes: 272
Antigüedad: 12 años, 1 mes
Puntos: 5
Respuesta: Consulta Indices en postgres

mejor que un ejemplo practico no hay nada,
quisiera agregar que solo deberia(no quiero decir que sea obligatorio) crear indices sobre columnas que seran usadas como criterios de comparacion, tengo entendido que crear un indice sobre una columna es costoso, pues a la hora de insertar es como si se estubiera insertando doble dicho valor, mirando una tabla como un libro de muchas paginas, pues el indice buscara en la pagina donde se guardo el valor y no recorre el libro(tabla) completo.
eso fue lo que lei hac un tiempo, no soy experto en postgres, espero sirva de ayuda a los principiantes como yop; si me equivoque pues favor de corregir mi error.
  #7 (permalink)  
Antiguo 14/06/2012, 20:51
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: Consulta Indices en postgres

hola....tengo una duda....quisiera saber que es mas eficiente....si tengo una tabla que sera actualizada por años con 240 tuplas....si es recomendable implementar un indexado cuando solo este en el primer año...o si sera mejor a los 3 años indexar ....por favor....necesito ayuda....saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:35.