Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.09.2007, 18:41
|
|||
|---|---|---|---|
почему не используется индекс??? |
|||
|
#18+
есть таблица CREATE TABLE "public"."xprop2" ( "id_seq" SERIAL, "node_id" "public"."uuid" NOT NULL, "xpath" VARCHAR, "xstring" VARCHAR, "parent_id" "public"."uuid", "xaccess" VARCHAR, "xstring_vector" "public"."tsvector", "xpath_vector" "public"."tsvector", "node_type" INTEGER, "node_subtype" INTEGER, "xaccess_vector" "public"."tsvector", "creation_date" TIMESTAMP(0) WITHOUT TIME ZONE, "modification_date" TIMESTAMP(0) WITHOUT TIME ZONE ) WITHOUT OIDS; DROP INDEX xprop2_created_idx; DROP INDEX xprop2_04_created_idx; DROP INDEX xprop2_05_created_idx; DROP INDEX xprop2_06_created_idx; DROP INDEX xprop2_07_created_idx; CREATE INDEX xprop2_created_idx ON xprop2 (creation_date); CREATE INDEX "xaccess2_idx" ON "public"."xprop2" USING gist ("xaccess_vector"); CREATE INDEX "xpath2_idx" ON "public"."xprop2" USING gist ("xpath_vector"); CREATE INDEX "xstring2_idx" ON "public"."xprop2" USING gist ("xstring_vector"); это нормальный план? m135=# explain analyze m135-# select * from xprop2 where m135-# creation_date > ('2007-01-01'::date + '1 month'::interval) limit 100; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=0.00..6.88 rows=100 width=354) (actual time=0.009..0.211 rows=100 loops=1) -> Result (cost=0.00..162.93 rows=2369 width=354) (actual time=0.009..0.168 rows=100 loops=1) -> Append (cost=0.00..162.93 rows=2369 width=354) (actual time=0.007..0.116 rows=100 loops=1) -> Seq Scan on xprop2 (cost=0.00..13.50 rows=93 width=252) (actual time=0.001..0.001 rows=0 loops=1) Filter: (creation_date > '2007-02-01 00:00:00'::timestamp without time zone) -> Seq Scan on xprop2_07 xprop2 (cost=0.00..149.43 rows=2276 width=354) (actual time=0.006..0.071 rows=100 loops=1) Filter: (creation_date > '2007-02-01 00:00:00'::timestamp without time zone) Total runtime: 0.274 ms (8 rows) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.09.2007, 18:55
|
|||
|---|---|---|---|
|
|||
почему не используется индекс??? |
|||
|
#18+
Winnipuhесть таблица CREATE TABLE "public"."xprop2" ( "id_seq" SERIAL, "node_id" "public"."uuid" NOT NULL, "xpath" VARCHAR, "xstring" VARCHAR, "parent_id" "public"."uuid", "xaccess" VARCHAR, "xstring_vector" "public"."tsvector", "xpath_vector" "public"."tsvector", "node_type" INTEGER, "node_subtype" INTEGER, "xaccess_vector" "public"."tsvector", "creation_date" TIMESTAMP(0) WITHOUT TIME ZONE, "modification_date" TIMESTAMP(0) WITHOUT TIME ZONE ) WITHOUT OIDS; DROP INDEX xprop2_created_idx; DROP INDEX xprop2_04_created_idx; DROP INDEX xprop2_05_created_idx; DROP INDEX xprop2_06_created_idx; DROP INDEX xprop2_07_created_idx; CREATE INDEX xprop2_created_idx ON xprop2 (creation_date); CREATE INDEX "xaccess2_idx" ON "public"."xprop2" USING gist ("xaccess_vector"); CREATE INDEX "xpath2_idx" ON "public"."xprop2" USING gist ("xpath_vector"); CREATE INDEX "xstring2_idx" ON "public"."xprop2" USING gist ("xstring_vector"); это нормальный план? m135=# explain analyze m135-# select * from xprop2 where m135-# creation_date > ('2007-01-01'::date + '1 month'::interval) limit 100; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=0.00..6.88 rows=100 width=354) (actual time=0.009..0.211 rows=100 loops=1) -> Result (cost=0.00..162.93 rows=2369 width=354) (actual time=0.009..0.168 rows=100 loops=1) -> Append (cost=0.00..162.93 rows=2369 width=354) (actual time=0.007..0.116 rows=100 loops=1) -> Seq Scan on xprop2 (cost=0.00..13.50 rows=93 width=252) (actual time=0.001..0.001 rows=0 loops=1) Filter: (creation_date > '2007-02-01 00:00:00'::timestamp without time zone) -> Seq Scan on xprop2_07 xprop2 (cost=0.00..149.43 rows=2276 width=354) (actual time=0.006..0.071 rows=100 loops=1) Filter: (creation_date > '2007-02-01 00:00:00'::timestamp without time zone) Total runtime: 0.274 ms (8 rows) сделать analyze таблице после создания индекса по creation_date и повторить explain ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.09.2007, 19:33
|
|||
|---|---|---|---|
почему не используется индекс??? |
|||
|
#18+
сделал анализ всем таблицам: главной и выведенным Такой план - лучше? ваше мнение... m135=# explain analyze m135-# select * from xprop2 where m135-# creation_date > ('2007-01-01 00:00:00'::timestamp + '1 month'::interval) m135-# and xstring_vector @@ to_tsquery('default','voice'); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ Result (cost=0.00..66.54 rows=16 width=353) (actual time=3.195..15.876 rows=6394 loops=1) -> Append (cost=0.00..66.54 rows=16 width=353) (actual time=3.194..12.421 rows=6394 loops=1) -> Index Scan using xstring2_idx on xprop2 (cost=0.00..8.27 rows=1 width=252) (actual time=0.016..0.016 rows=0 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Heap Scan on xprop2_07 xprop2 (cost=4.37..58.27 rows=15 width=353) (actual time=3.177..9.782 rows=6394 loops=1) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Index Scan on xstring2_07_idx (cost=0.00..4.37 rows=15 width=0) (actual time=3.023..3.023 rows=6394 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Total runtime: 17.346 ms (10 rows) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.09.2007, 19:39
|
|||
|---|---|---|---|
|
|||
почему не используется индекс??? |
|||
|
#18+
Winnipuhсделал анализ всем таблицам: главной и выведенным Такой план - лучше? ваше мнение... m135=# explain analyze m135-# select * from xprop2 where m135-# creation_date > ('2007-01-01 00:00:00'::timestamp + '1 month'::interval) m135-# and xstring_vector @@ to_tsquery('default','voice'); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ Result (cost=0.00..66.54 rows=16 width=353) (actual time=3.195..15.876 rows=6394 loops=1) -> Append (cost=0.00..66.54 rows=16 width=353) (actual time=3.194..12.421 rows=6394 loops=1) -> Index Scan using xstring2_idx on xprop2 (cost=0.00..8.27 rows=1 width=252) (actual time=0.016..0.016 rows=0 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Heap Scan on xprop2_07 xprop2 (cost=4.37..58.27 rows=15 width=353) (actual time=3.177..9.782 rows=6394 loops=1) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Index Scan on xstring2_07_idx (cost=0.00..4.37 rows=15 width=0) (actual time=3.023..3.023 rows=6394 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Total runtime: 17.346 ms (10 rows) по крайней мере у вас планнер заметил индекс после analyze. дальше сами решайте, как эффективнее. начиная с нескольких тысяч записей в среднем индекс-скан начинает выигрывать у последовательного просмотра. но все также зависит от мощности выборки. если у вас в запросе вернется треть таблицы, лучше такой запрос делать seqscan-ом из-за очевидных особенностей физического доступа к жесткому диску (последовательное чтение гораздо быстрее рандомного). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.09.2007, 19:44
|
|||
|---|---|---|---|
почему не используется индекс??? |
|||
|
#18+
iz Winnipuhсделал анализ всем таблицам: главной и выведенным Такой план - лучше? ваше мнение... m135=# explain analyze m135-# select * from xprop2 where m135-# creation_date > ('2007-01-01 00:00:00'::timestamp + '1 month'::interval) m135-# and xstring_vector @@ to_tsquery('default','voice'); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ Result (cost=0.00..66.54 rows=16 width=353) (actual time=3.195..15.876 rows=6394 loops=1) -> Append (cost=0.00..66.54 rows=16 width=353) (actual time=3.194..12.421 rows=6394 loops=1) -> Index Scan using xstring2_idx on xprop2 (cost=0.00..8.27 rows=1 width=252) (actual time=0.016..0.016 rows=0 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Heap Scan on xprop2_07 xprop2 (cost=4.37..58.27 rows=15 width=353) (actual time=3.177..9.782 rows=6394 loops=1) Filter: ((creation_date > '2007-02-01 00:00:00'::timestamp without time zone) AND (xstring_vector @@ '''voic'''::tsquery)) -> Bitmap Index Scan on xstring2_07_idx (cost=0.00..4.37 rows=15 width=0) (actual time=3.023..3.023 rows=6394 loops=1) Index Cond: (xstring_vector @@ '''voic'''::tsquery) Total runtime: 17.346 ms (10 rows) по крайней мере у вас планнер заметил индекс после analyze. дальше сами решайте, как эффективнее. начиная с нескольких тысяч записей в среднем индекс-скан начинает выигрывать у последовательного просмотра. но все также зависит от мощности выборки. если у вас в запросе вернется треть таблицы, лучше такой запрос делать seqscan-ом из-за очевидных особенностей физического доступа к жесткому диску (последовательное чтение гораздо быстрее рандомного). понял, спасибо! по поводу количества возвращаемых: я явно буду резать limit 1000 или около того, но реально там будет больше. В таком случае важен будет не лимит, а реальное количество? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.09.2007, 20:07
|
|||
|---|---|---|---|
|
|||
почему не используется индекс??? |
|||
|
#18+
Winnipuh по поводу количества возвращаемых: я явно буду резать limit 1000 или около того, но реально там будет больше. В таком случае важен будет не лимит, а реальное количество? нужно будет смотреть на explain analyze -- там явно будет написано кол-во рядов, с которыми работает executor до сортировки и лимита -- и вы увидите, будет ли он поднимать существенную часть таблицы или нет. правда, имейте в виду, что это тюнинг конкретных запросов -- довольно тонкая вещь, к которой стоит прибегать только после того, когда вы убедитесь, что у вас сам сервер нормально настроен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&tablet=1&tid=2005019]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 340ms |

| 0 / 0 |
