powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как заставить оптимизатор использовать индекс не только в данной сессии?
8 сообщений из 8, страница 1 из 1
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32418807
pg_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице построен индекс.
При оценке имеем следующее:

[/SRC]
db=# explain analyse select ....
NOTICE: ПЛАН ЗАПРОСА:

Aggregate (cost=1902.05..1902.05 rows=1 width=16) (actual time=76.19..76.19 rows=1 loops=1)
-> Seq Scan on table (cost=0.00..1902.02 rows=5 width=16) (actual time=6.42..76.12 rows=23 loops=1)
Total runtime: 76.29 msec
[/SRC]

делаем set enable_seqscan=false;

Получаем:

Код: plaintext
1.
2.
3.
4.
5.
6.
db=# explain analyse select ....
NOTICE:  ПЛАН ЗАПРОСА:

Aggregate  (cost= 2359 . 93 .. 2359 . 93  rows= 1  width= 16 ) (actual time= 6 . 49 .. 6 . 49  rows= 1  loops= 1 )
  ->  Index Scan using table_idx on table  (cost= 0 . 00 .. 2359 . 90  rows= 5  width= 16 ) (actual time= 0 . 13 .. 6 . 43  rows= 23  loops= 1 )
Total runtime:  6 . 60  msec


Собственно, два вопроса: а) - почему оптимизатор не хочет использовать здесь индекс (хотя время выполнения запроса очевидно сокращается на порядок), и б) - как заставить оптимизатор использовать индекс в данном запросе не только в течение текущей сессии
???
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32418914
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну зачем повторять старые топики?
Сделайте поиск по этому форуму key="seq_scan" и в ветке "Почему Постгрес не использует индексы" прочитайте плиз пространнейшее обсуждение.
Коротко говоря - не всегда индексы - благо. И насиловать планировщик
- не самое верное решение.
Впрочем желание понятное - сам помечтать люблю чтоб индексы юзались при запросах вида "select phw,phh from emph where phw ~'%Х97281150647К%' or phh ~'%Р8112867519125К%' " а табличка имеет вид: "create table phh(.... phw text,phh text) " Только вот не выходит 8)\
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32419319
pg_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Schweik
sorry & tnx!
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32419512
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"почему оптимизатор не хочет использовать здесь индекс (хотя время выполнения запроса очевидно сокращается на порядок)"

Сокращается реальное время запроса (actual time), но предполагаемое время для index-scan (2359.93) больше чем для sec-scan (1902.05) - именно поэтому планировщик выбирает seq-scan.

Можно уточнить: сколько строк в таблице; и что находится в условии "where" запроса?

Попробуйте vacuum analyze - может быть выбор планировщика изменится.

"как заставить оптимизатор использовать индекс в данном запросе не только в течение текущей сессии"

Вроде бы никак. Ключи оптимизатора set_* относятся не к запросу, а к дочернему процессу постгреса, обслуживающему данный коннект. Поэтому в каждой сессии придется перед запросом выполнять "set enable_seqscan=false", после - "set enable_seqscan=true".
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32419519
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"сам помечтать люблю чтоб индексы юзались при запросах вида "select phw,phh from emph where phw ~'%Х97281150647К%'"

А tsearch не решает эту задачу?
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32419611
pg_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Можно уточнить: сколько строк в таблице; и что находится в условии "where" запроса?

Да, конечно.
На сегодня 41351 запись,
конструкция where такова:

Код: plaintext
...where date>='2004-02-01' and date<='2004-02-24' and prod_name='каустик' and workshop= 6 ;


Индекс построен мной по полю prod_name.
Вопрос относительно выбора связующего поля в данном случае сам бы хотел задать - благо, оптимизирую чужое "творение" :)
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32419852
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень странно что, хотя в таблице много строк, выбирается seq-scan.

Сделайте пожалуйста "explain select ... from ..." без условия where.

Vacuum analyze ситуцию не изменил?
...
Рейтинг: 0 / 0
Как заставить оптимизатор использовать индекс не только в данной сессии?
    #32420230
pg_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Очень странно что, хотя в таблице много строк, выбирается seq-scan.

Я, собственно, из этих соображений и начал ветку :)



Но Вы были абсолютно правы! Прошел ночной vacuum analyze - теперь index scan :)

Всем спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как заставить оптимизатор использовать индекс не только в данной сессии?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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