За последние 24 часа нас посетили 17465 программистов и 1715 роботов. Сейчас ищут 1687 программистов ...

Планеровщик меняет план запроса на неправильный

Тема в разделе "PostgreSQL", создана пользователем alexey_baranov, 13 мар 2009.

  1. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    кто знает, почему планировщик после небольшого увеличения запроса меняет план с правильного на неправильный?

    вот запрос. вся беда в последних 6 строчках, 5 из которых закомментированы
    [sql] select
    zaya.id as "№",
    zaya.text as "причина обращения",
    kontaktnoe_litso.familiya as "контактное лицо",
    level0.name as "уровень",
    born(zaya.id) as "открыта"
    from
    zayavka2 as zaya
    join sotrudnik2 as initier on zaya.initier= initier.id
    join sotrudnik2 as kontaktnoe_litso on zaya.kontaktnoe_litso= kontaktnoe_litso.id
    left outer join objectt0 as level0 on initier.uroven= level0.id
    where
    '/1/24078/' << zaya.path
    and (
    i1 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    --or i2 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    --or i3 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    --or i4 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    --or i5 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    --or i6 in (70797 , 71657 , 71656 , 71655 , 70791 , 92722)
    )[/sql]
    в таком виде запрос работает. если последовательно откомментировывать строки, то все будет работать пока количество оров не достигает пяти. Причем в любых комбинациях. Увеличение or' ов только увеличивает план запроса на одну стрелку (в pgAdmin) в одном месте, но кардинально план не меняет. и запрос выполняется правильно. Как только количество or' ов становится равно пяти, план сильно меняется и время выполнения стремится к бесконечности. что за фигня? как это победить? хочу пятую стрелочку! почему план меняется?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а union тут нету?