powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему не используется индекс из двух полей при выборке только по первому полю?
2 сообщений из 27, страница 2 из 2
Почему не используется индекс из двух полей при выборке только по первому полю?
    #39893786
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Trizno
qwwq,

вот как-то так:

Код: plaintext
1.
2.
Nested Loop  (cost=1.83..26492558.82 rows=49417220 width=220)
...


"прелестно"(cc)

автор
Код: plaintext
Hash Join  (cost=86543.64..89268074.85 rows=885580 width=220)

26492558 < 89268074

т.е. этот фигляр пж не умеет даже в арифметику

что давно очевидно
...
Рейтинг: 0 / 0
Почему не используется индекс из двух полей при выборке только по первому полю?
    #39893837
Alexey Trizno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Сделал сейчас так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
cpu_index_tuple_cost	0.005
cpu_operator_cost	0.0025
cpu_tuple_cost	0.1
parallel_setup_cost	1000
parallel_tuple_cost	0.1
random_page_cost	0.11
seq_page_cost	0.1

Далее так, чтобы вернуть исходные условия (верно?):

Код: plsql
1.
2.
3.
4.
alter table respondents alter project_id set STATISTICS -1;
alter table respondents alter project_id set (n_distinct = 0);

analyze respondents;



И план по исходному запросу сейчас такой:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Nested Loop  (cost=1.83..345316810.01 rows=868625 width=220) (actual time=0.462..0.462 rows=0 loops=1)
  ->  Nested Loop  (cost=1.13..16513.65 rows=16168 width=8) (actual time=0.431..0.445 rows=9 loops=1)
        ->  Index Only Scan using ix_respondents_projectid_id on respondents r  (cost=0.56..1405.48 rows=12858 width=8) (actual time=0.401..0.403 rows=9 loops=1)
              Index Cond: (project_id = 6)
              Heap Fetches: 0
        ->  Index Only Scan using ix_interviews_respondentid_id on interviews i  (cost=0.56..0.98 rows=2 width=16) (actual time=0.004..0.004 rows=1 loops=9)
              Index Cond: (respondent_id = r.id)
              Heap Fetches: 0
  ->  Index Scan using ix_interviewquestiondetails_interviewid_questionnumber on interview_question_details iqd  (cost=0.70..12977.02 rows=83800 width=220) (actual time=0.002..0.002 rows=0 loops=9)
        Index Cond: (interview_id = i.id)
Planning time: 2.900 ms
Execution time: 0.530 ms



Но т.к. меняли уже несколько вещей, что именно ему помогло сделать правильный план? Изменение *_cost?
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему не используется индекс из двух полей при выборке только по первому полю?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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