Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, ускорить запрос / 10 сообщений из 10, страница 1 из 1
12.02.2015, 19:09
    #38878491
Postgres111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Добрый вечер.

Помогите, пожалуйста, ускорить запрос.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
SELECT t.id, 
       t.final_type_id, 
       t.author_id, 
       t.creator, 
       t.created_date, 
       t.updated_date, 
       t.updated_by_id, 
       t.media_type, 
       t.title, 
       t.date, 
       t.category_id, 
       t.topic_id, 
       t.annotation, 
       t.chars_number, 
       t.source_id, 
       t.original_id, 
       t.duplicates, 
       t.filling_rating, 
       t.attendance, 
       t.deleted, 
       t.artefact_hash, 
       core_source.id, 
       core_source.final_type_id, 
       core_source.name, 
       core_source.region, 
       core_source.attendance, 
       core_source.rating, 
       core_source.subtype 
FROM   (SELECT core_article.* 
        FROM   core_article 
        WHERE  core_article.deleted = false 
               AND core_article.media_type NOT IN (SELECT U0.slug 
                                                   FROM   core_mediatype U0 
                   INNER JOIN core_portal_unused_media_types 
                              U1 
                           ON ( U0.id = U1.mediatype_id ) 
                                                   WHERE  U1.portal_id = 19) 
               AND core_article.id IN (SELECT core_articlekeyword.article_id 
                                       FROM   core_articlekeyword 
                                       WHERE  core_articlekeyword.keyword_id IN 
                                              ( 
                                              141, 142, 143, 144, 
                                              145, 146, 147, 148, 
                                              149, 150, 151, 152, 
                                              153, 154, 155, 156, 
                                              157, 158, 160, 161, 
                                              162, 163, 264, 288, 365 )) 
               AND ( core_article.topic_id IS NULL 
                      OR core_article.topic_id IN (SELECT U0.id 
                                                   FROM   core_articletopic U0 
                         INNER JOIN core_portal_topics 
                                    U1 
                                 ON ( 
                         U0.id = U1.articletopic_id ) 
                                                   WHERE  U1.portal_id = 19) ) 
        ORDER  BY core_article.date DESC, 
                  core_article.created_date DESC 
        LIMIT  10) T 
       INNER JOIN core_source 
               ON ( T.source_id = core_source.id ) 
ORDER  BY T.date DESC, 
          T.created_date DESC; 



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Nested Loop  (cost=69674.37..69749.34 rows=10 width=719) (actual time=1395.697..1395.807 rows=10 loops=1)
   ->  Limit  (cost=69674.09..69674.11 rows=10 width=1085) (actual time=1395.661..1395.686 rows=10 loops=1)
         ->  Sort  (cost=69674.09..69722.32 rows=19292 width=1085) (actual time=1395.656..1395.665 rows=10 loops=1)
               Sort Key: core_article.date, core_article.created_date
               Sort Method: top-N heapsort  Memory: 43kB
               ->  Hash Join  (cost=6383.54..69257.19 rows=19292 width=1085) (actual time=205.561..1324.690 rows=37031 loops=1)
                     Hash Cond: (core_article.id = core_articlekeyword.article_id)
                     ->  Seq Scan on core_article  (cost=5.62..61434.83 rows=116186 width=1085) (actual time=0.067..573.527 rows=229028 loops=1)
                           Filter: ((NOT deleted) AND (NOT (hashed SubPlan 1)) AND ((topic_id IS NULL) OR (hashed SubPlan 2)))
                           Rows Removed by Filter: 17834
                           SubPlan 1
                             ->  Nested Loop  (cost=0.00..2.17 rows=1 width=7) (actual time=0.012..0.012 rows=0 loops=1)
                                   Join Filter: (u0.id = u1.mediatype_id)
                                   ->  Seq Scan on core_portal_unused_media_types u1  (cost=0.00..1.04 rows=1 width=4) (actual time=0.010..0.010 rows=0 loops=1)
                                         Filter: (portal_id = 19)
                                         Rows Removed by Filter: 3
                                   ->  Seq Scan on core_mediatype u0  (cost=0.00..1.06 rows=6 width=11) (never executed)
                           SubPlan 2
                             ->  Nested Loop  (cost=0.00..3.44 rows=1 width=4) (actual time=0.032..0.102 rows=1 loops=1)
                                   Join Filter: (u0_1.id = u1_1.articletopic_id)
                                   Rows Removed by Join Filter: 36
                                   ->  Seq Scan on core_portal_topics u1_1  (cost=0.00..1.61 rows=1 width=4) (actual time=0.017..0.022 rows=1 loops=1)
                                         Filter: (portal_id = 19)
                                         Rows Removed by Filter: 53
                                   ->  Seq Scan on core_articletopic u0_1  (cost=0.00..1.37 rows=37 width=4) (actual time=0.007..0.037 rows=37 loops=1)
                     ->  Hash  (cost=6015.28..6015.28 rows=29011 width=4) (actual time=204.138..204.138 rows=37127 loops=1)
                           Buckets: 4096  Batches: 1  Memory Usage: 1306kB
                           ->  HashAggregate  (cost=5725.17..6015.28 rows=29011 width=4) (actual time=114.478..162.577 rows=37127 loops=1)
                                 ->  Bitmap Heap Scan on core_articlekeyword  (cost=886.40..5623.30 rows=40749 width=4) (actual time=7.923..55.754 rows=42349 loops=1)
                                       Recheck Cond: (keyword_id = ANY ('{141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,163,264,288,365}'::integer[]))
                                       ->  Bitmap Index Scan on core_articlekeyword_keyword_id  (cost=0.00..876.22 rows=40749 width=0) (actual time=7.567..7.567 rows=42361 loops=1)
                                             Index Cond: (keyword_id = ANY ('{141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,163,264,288,365}'::integer[]))
   ->  Index Scan using core_source_pkey on core_source  (cost=0.28..7.50 rows=1 width=60) (actual time=0.005..0.007 rows=1 loops=10)
         Index Cond: (id = core_article.source_id)
 Total runtime: 1396.328 ms
(35 rows)
...
Рейтинг: 0 / 0
12.02.2015, 20:34
    #38878534
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Postgres111,
бы думал в этом направлении:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE INDEX
ON core_article 
[USING GIST /* + btree_gist */]
(
[F{keystore/*add key fld AS hstore OR array, not in other table*/},]
"date" [DESC],created_date [DESC])
[WHERE deleted = false ] ;



в [] -- то, что не обязательно, в {} -- что можно сделать нестандартного.

И без него может помочь, если искомые статьи и носители -- часты с конца [временннОго индекса].

обратный вариант -- запхать "date",created_date в core_articlekeyword [денормализация]. там даже hstore и btree_gist не потребуются.

и самоег главное
Код: sql
1.
2.
 core_article.id IN (SELECT core_articlekeyword.article_id 
                                       FROM   core_articlekeyword ...


поменяйте на
Код: sql
1.
  EXISTS (SELECT 1  FROM  core_articlekeyword ...


если, опять таки, статей много и с конца, и вы не ожидаете просмотра почти всех id

<если все статьи кейвордированы ==> их кейвордов будет больше чем статей, а если искомые статьи заведомо есть в малом слайсе -- зачем вам весь список article_id за все времена >
...
Рейтинг: 0 / 0
13.02.2015, 00:46
    #38878619
Postgres111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
этта,

Огромное спасибо, очень помогло!
...
Рейтинг: 0 / 0
13.02.2015, 10:06
    #38878770
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Postgres111,
вам хватило exists + index ?
...
Рейтинг: 0 / 0
18.02.2015, 18:47
    #38883263
Postgres111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
этта,

Еще раз спасибо за помощь. Прошу прощения за долгий ответ. Использование exists дало само по себе более чем хороший результат. Индекс не создался:

Код: plsql
1.
2.
ERROR:  data type timestamp with time zone has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.
...
Рейтинг: 0 / 0
18.02.2015, 22:11
    #38883373
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Postgres111этта,

Еще раз спасибо за помощь. Прошу прощения за долгий ответ. Использование exists дало само по себе более чем хороший результат. Индекс не создался:

Код: plsql
1.
2.
ERROR:  data type timestamp with time zone has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.


gist там относился к денормалищации полем hstore , или array-ем keywords
так, некая далёкая фантазия
там много ещё ручками для неё надо изображать
не берите в голову

по полям же timestamptz -- обычный составной btree
...
Рейтинг: 0 / 0
05.09.2015, 20:46
    #39044067
I00N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Добрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
...
Рейтинг: 0 / 0
06.09.2015, 11:11
    #39044201
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
I00NДобрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
доброе;
а с вами ?
...
Рейтинг: 0 / 0
06.09.2015, 11:49
    #39044214
I00N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
qwwqI00NДобрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
доброе;
а с вами ?
Благодарю за ответ, i00n@teewars.org
...
Рейтинг: 0 / 0
28.09.2015, 16:29
    #39063299
enakenenaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, ускорить запрос
Уберите In
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, ускорить запрос / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]