複合インデックス使用時のDESCでインデックスが使われない
たとえば
create table customer(id integer, birthday date); create index customer_idx on customer(id, birthday); select * from customer order by id, birthday desc;
これだとインデックスが使われない.
そんな時は,こうしてインデックスを作ってみよう.
create or replace function datecmprev(date,date) returns integer as $$ select date_cmp($2,$1);$$ language sql; create operator class date_desc_ops for type date using btree as operator 1 >, operator 2 >=,operator 3 =, operator 4 <=, operator 5 <, function 1 datecmprev(date,date); create index customer_idx_rev on customer(id, birthday date_desc_ops); select * from customer order by id, birthday desc;
これでインデックスが使われるようになるはず.
※今回はdate型だったが,他の型の場合はちょっと違うので注意.btint4cmpだったような・・・\df bt*ってやればわかる.