powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, ускорить запрос
10 сообщений из 10, страница 1 из 1
Помогите, пожалуйста, ускорить запрос
    #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
Помогите, пожалуйста, ускорить запрос
    #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
Помогите, пожалуйста, ускорить запрос
    #38878619
Postgres111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
этта,

Огромное спасибо, очень помогло!
...
Рейтинг: 0 / 0
Помогите, пожалуйста, ускорить запрос
    #38878770
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Postgres111,
вам хватило exists + index ?
...
Рейтинг: 0 / 0
Помогите, пожалуйста, ускорить запрос
    #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
Помогите, пожалуйста, ускорить запрос
    #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
Помогите, пожалуйста, ускорить запрос
    #39044067
I00N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
...
Рейтинг: 0 / 0
Помогите, пожалуйста, ускорить запрос
    #39044201
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I00NДобрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
доброе;
а с вами ?
...
Рейтинг: 0 / 0
Помогите, пожалуйста, ускорить запрос
    #39044214
I00N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqI00NДобрый вечер, этта!
Есть деловой вопрос к Вам, как с Вами можно связаться?
доброе;
а с вами ?
Благодарю за ответ, i00n@teewars.org
...
Рейтинг: 0 / 0
Помогите, пожалуйста, ускорить запрос
    #39063299
Фотография enakenenaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уберите In
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, ускорить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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