|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
В таблице построен индекс. При оценке имеем следующее: [/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.
Собственно, два вопроса: а) - почему оптимизатор не хочет использовать здесь индекс (хотя время выполнения запроса очевидно сокращается на порядок), и б) - как заставить оптимизатор использовать индекс в данном запросе не только в течение текущей сессии ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 08:48 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
Ну зачем повторять старые топики? Сделайте поиск по этому форуму key="seq_scan" и в ветке "Почему Постгрес не использует индексы" прочитайте плиз пространнейшее обсуждение. Коротко говоря - не всегда индексы - благо. И насиловать планировщик - не самое верное решение. Впрочем желание понятное - сам помечтать люблю чтоб индексы юзались при запросах вида "select phw,phh from emph where phw ~'%Х97281150647К%' or phh ~'%Р8112867519125К%' " а табличка имеет вид: "create table phh(.... phw text,phh text) " Только вот не выходит 8)\ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 10:04 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
2 Schweik sorry & tnx! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:23 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
"почему оптимизатор не хочет использовать здесь индекс (хотя время выполнения запроса очевидно сокращается на порядок)" Сокращается реальное время запроса (actual time), но предполагаемое время для index-scan (2359.93) больше чем для sec-scan (1902.05) - именно поэтому планировщик выбирает seq-scan. Можно уточнить: сколько строк в таблице; и что находится в условии "where" запроса? Попробуйте vacuum analyze - может быть выбор планировщика изменится. "как заставить оптимизатор использовать индекс в данном запросе не только в течение текущей сессии" Вроде бы никак. Ключи оптимизатора set_* относятся не к запросу, а к дочернему процессу постгреса, обслуживающему данный коннект. Поэтому в каждой сессии придется перед запросом выполнять "set enable_seqscan=false", после - "set enable_seqscan=true". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 14:47 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
"сам помечтать люблю чтоб индексы юзались при запросах вида "select phw,phh from emph where phw ~'%Х97281150647К%'" А tsearch не решает эту задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 14:49 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
>>Можно уточнить: сколько строк в таблице; и что находится в условии "where" запроса? Да, конечно. На сегодня 41351 запись, конструкция where такова: Код: plaintext
Индекс построен мной по полю prod_name. Вопрос относительно выбора связующего поля в данном случае сам бы хотел задать - благо, оптимизирую чужое "творение" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 15:31 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
Очень странно что, хотя в таблице много строк, выбирается seq-scan. Сделайте пожалуйста "explain select ... from ..." без условия where. Vacuum analyze ситуцию не изменил? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 17:24 |
|
Как заставить оптимизатор использовать индекс не только в данной сессии?
|
|||
---|---|---|---|
#18+
>>Очень странно что, хотя в таблице много строк, выбирается seq-scan. Я, собственно, из этих соображений и начал ветку :) Но Вы были абсолютно правы! Прошел ночной vacuum analyze - теперь index scan :) Всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2004, 07:55 |
|
|
start [/forum/topic.php?fid=53&fpage=359&tid=2007946]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 166ms |
0 / 0 |