Re: EXPLAIN

Lists: pgsql-ru-general
From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: EXPLAIN
Date: 2011-10-09 20:17:04
Message-ID: 20111009201703.GA1928@apache.rbscorp.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

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

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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537


From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: Anton Krasikov <krasikov(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: EXPLAIN
Date: 2011-10-10 05:21:24
Message-ID: 20111010052123.GB1928@apache.rbscorp.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

> Если я не ошибаюсь, 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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537


From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
Cc: Anton Krasikov <krasikov(at)gmail(dot)com>, pgsql-ru-general(at)postgresql(dot)org
Subject: Re: EXPLAIN
Date: 2011-10-10 06:51:57
Message-ID: CAAfz9KNxBEhJ_8ib5AexJhKurvnZEz1yeLMATbHYsXB2MRG7BQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Привет,

10 октября 2011 г. 9:21 пользователь Dmitry E. Oboukhov
<unera(at)debian(dot)org>написал:

> > Если я не ошибаюсь, 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)
>
> Что надо сделать чтобы он стал показывать индексы в планах запроса?
>

SET enable_seqscan TO OFF;
--
// Dmitriy.


From: Viacheslav N Tararin <taras(at)logicland(dot)com(dot)ua>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: EXPLAIN
Date: 2011-10-10 06:55:42
Message-ID: 4E9296EE.1010402@logicland.com.ua
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Добрый день.

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

Это не как в МуSQL - это как везде. Построени плана запроса идет из
оценки стоимости операции. По маленькой таблице последовательное
сканирование дешевле поиска по индексу, а затем поиску страницы в таблице.

--
With b/r Viacheslav N Tararin.

Abonent Logic Land http://abonent.logicland.com.ua/
Logic Land ltd. http://logicland.com.ua/

Uralska st., 8, Kamenets-Podilskiy,
Khmelnitskiy reg., 32300, Ukraine

Tel/fax: +38-03849-3-63-80

Attachment Content-Type Size
taras.vcf text/x-vcard 271 bytes

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: EXPLAIN
Date: 2011-10-11 10:09:07
Message-ID: 20111011100907.GB18095@apache.rbscorp.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general


> Что надо сделать чтобы он стал показывать индексы в планах запроса?

> SET enable_seqscan TO OFF;

спасибо :)
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537