Thread: EXPLAIN

EXPLAIN

From
"Dmitry E. Oboukhov"
Date:
как у постгриса спросить какие ключи он будет использовать при
запросе?

pgsql=> explain VERBOSE select id, ext_id from users where sid = 1 and ext_id = '1234';
                          QUERY PLAN
---------------------------------------------------------------
 Seq Scan on public.users  (cost=0.00..2.48 rows=1 width=36)
   Output: id, ext_id
   Filter: ((users.sid = 1) AND (users.ext_id = '1234'::text))
(3 rows)

при этом есть ключ уникальный
    (sid, ext_id)

как убедиться что постгрис этот ключ будет использовать в запросах?
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment

Re: EXPLAIN

From
"Dmitry E. Oboukhov"
Date:
> Если я не ошибаюсь, explain должен показать Index Scan с именем ключа.
> Подробнее про explain можно почитать в официальных доках:
> http://www.postgresql.org/docs/9.1/interactive/using-explain.html

ага я с этого читать и начал (только у меня PG9.0)

=> \d users

                                 Table "public.users"
  Column  |         Type          |     Modifiers
----------+-----------------------+------------------------
 id       | integer               |
 rid      | integer               |
 sid      | integer               |
 login    | character varying(32) |      Вырезано
 password | character varying(32) |    за ненадобностью
 is_test  | boolean               |
 ext_id   | text                  |
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_login_key" UNIQUE, btree (login)
    "users_unique_ext_id_sid_index" UNIQUE,
        btree (ext_id, sid) WHERE ext_id IS NOT NULL
...


видно что по полю login например есть "users_login_key" UNIQUE,
btree (login), однако:

=> EXPLAIN SELECT * FROM users WHERE login = 't';
                      QUERY PLAN
------------------------------------------------------
 Seq Scan on users  (cost=0.00..2.40 rows=1 width=59)
   Filter: ((login)::text = 't'::text)
(2 rows)

Что надо сделать чтобы он стал показывать индексы в планах запроса?
Или это как в MySQL: пока табличка маленькая индексы просто не
используются и надо табличку заполнить большой кучей данных прежде чем
смотреть как он будет использовать их?

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment