👋

インデックスのソート順

2025/03/12に公開

Daily Blogging81日目

B-treeインデックスってソート順も指定できるんですねと
https://www.postgresql.jp/docs/9.4/indexes-ordering.html

PostgreSQL以外にも指定できるDBはあるらしい

ソートのオプション

ソートってACSとDESCだけでしょ?と思っているあなたっ
まぁほぼほぼ間違ってないです

デフォルトだとASCでB-treeインデックスが作成されます

DESCの場合

こういう指定ができる

CREATE INDEX idx_created_at_desc ON my_table (created_at DESC);

この場合、created_atのDESCでインデックスがソートされる

システムにおいて、created_atを降順で取得するケースがほとんどの場合はインデックスも降順にソートしておいてあげることで、ORDER BYする時のパフォーマンスが良くなる可能性がある。

複合インデックスの場合

複合インデックスでもソートは指定できる。
カラムごとにソート順は指定可能

CREATE INDEX idx_orders_user_date ON orders (user_id ASC, order_date DESC);

どうするNULL?

NULLを最初に持ってくるのか、それとも最後に持ってくるのか
そこも指定できる

デフォルトだと
ASC : NULL LAST
DESC: NULL FIRST

指定の仕方はこんな感じ

CREATE INDEX idx_tasks_priority_due ON tasks (priority DESC, due_date ASC NULLS FIRST);
CREATE INDEX idx_tasks_due_asc ON tasks (due_date DESC NULLS LAST);

Discussion