KDOC 496: Index (Only) Scanの様子を見る
この文書のステータス
- 作成
- <署名>
- レビュー
- <署名>
概要
indexが使われる様子を確かめる。
まず、indexを使わないパターン。
CREATE TABLE users ( name varchar(255), num integer ); CREATE INDEX idx_users_name ON users(name); -- indexを使わない explain select name from users where num = 1;
| | |--------------------------------------------------------| | > CREATE TABLE users ( | | > name varchar(255), | | > num integer | | > ); | | CREATE TABLE | | | | > CREATE INDEX idx_users_name ON users(name); | | CREATE INDEX | | | | > explain | | > select name from users where num = 1; | | QUERY PLAN | | Seq Scan on users (cost=0.00..11.75 rows=1 width=516) | | Filter: (num = 1) |
つぎに、index scan するパターン。
CREATE TABLE users ( id serial PRIMARY KEY, name varchar(255) ); CREATE INDEX idx_users_name ON users(name); explain select id from users where name = 'a';
| | |----------------------------------------------------------------------------| | > CREATE TABLE users ( | | > id serial PRIMARY KEY, | | > name varchar(255) | | > ); | | CREATE TABLE | | | | > CREATE INDEX idx_users_name ON users(name); | | CREATE INDEX | | | | > explain | | > select id from users where name = 'a'; | | QUERY PLAN | | Index Scan using idx_users_name on users (cost=0.14..8.16 rows=1 width=4) | | Index Cond: ((name)::text = 'a'::text) |
index only scan するパターン。
CREATE TABLE users ( name varchar(255), num integer ); CREATE INDEX idx_users_name ON users(name); -- indexを使う explain select name from users where name = 'a';
| | |-----------------------------------------------------------------------------------| | > CREATE TABLE users ( | | > name varchar(255), | | > num integer | | > ); | | CREATE TABLE | | | | > CREATE INDEX idx_users_name ON users(name); | | CREATE INDEX | | | | > explain | | > select name from users where name = 'a'; | | QUERY PLAN | | Index Only Scan using idx_users_name on users (cost=0.14..8.16 rows=1 width=516) | | Index Cond: (name = 'a'::text) |
関連
なし。