@poniatowski: Zastanawialem sie tylko nad inedxem company id, name i lower(name). Wiem, ze niby taki z lower() jest wydajniejszy. Ale ja musze sprawdzac wielkosc liter takze nawet jak jest szybszy to nie moge go uzyc. Dzieki.
Nie wiem czy zrozumiałem Twój przypadek, ale co z query, w którym dostęp będzie po indeksie case insensitive
+ filtrowanie case sensitive
?
Na zasadzie:
select * from foo where
id=:id and lower(name)=lower(:name) -- dostęp po indeksie
and name=:name; -- filtrowanie
create table foo (
id integer,
name text
);
insert into foo
select x,'ABC' from generate_series(1,10000) x;
insert into foo
select x,'AbC' from generate_series(1,10000) x;
create index ix_foo_id_lower_name on foo (id, lower(name));
explain select * from foo where id=5 and lower(name)=lower('ABC') and name='ABC';