Tengo postgres 8.3.4 sobre debian.
Una tabla de 36.000.000 de registros que es un padron de usuarios.
Con estos indices.
El problema es que cuando hago:
select * from rrjpadron
where nombre="XXX" 
entra por el indice que corresponde.


Pero cuando hago
select * from rrjpadron 
where nombre like '%XXXX%'
no lo hace por ningun indice.

Que falta hacer?


CREATE TABLE rrjpadron
(
  num_doc numeric(8),
  tipodoc character varying(4),
  sexo character(1),
  clase numeric(4),
  nombre character varying(20),
  direccion character varying(20),
  ciudad character varying(17),
  localidad character varying(17),
  provincia character varying(4),
  profesion character varying(10)
)
WITH (OIDS=FALSE);
ALTER TABLE rrjpadron OWNER TO postgres;
GRANT ALL ON TABLE rrjpadron TO postgres;
GRANT ALL ON TABLE rrjpadron TO admins WITH GRANT OPTION;

-- Index: rrjpadron4

-- DROP INDEX rrjpadron4;

CREATE INDEX rrjpadron4
  ON rrjpadron
  USING btree
  (num_doc, lower(nombre::text), lower(sexo::text), lower(provincia::text));

-- Index: rrjpadron5

-- DROP INDEX rrjpadron5;

CREATE INDEX rrjpadron5
  ON rrjpadron
  USING btree
  (lower(nombre::text), lower(sexo::text), lower(provincia::text));

-- Index: rrjpadron6

-- DROP INDEX rrjpadron6;

CREATE INDEX rrjpadron6
  ON rrjpadron
  USING btree
  (nombre, sexo, provincia);

-- Index: rrjpadron7

-- DROP INDEX rrjpadron7;

CREATE INDEX rrjpadron7
  ON rrjpadron
  USING btree
  (num_doc, nombre, sexo, provincia);


Antonio

Responder a