Конференция "Базы" » Можно ли уменьшить время выполнения запроса [D7, IB6.x]
 
  • abhtr (21.11.08 15:10) [20]

    > Anatoly Podgoretsky ©   (21.11.08 15:05) [19]

    Извините, что вклиниваюсь... Но пример в начале этой ветке не является примером вложенных запросов? Он - то у меня работает, правда, медленно...
  • sniknik © (21.11.08 15:14) [21]
    > Увы, запрос не прошел. Курсор останавливается после join и пишет:
    тогда забудь.

    > ИБ и его клоны
    IB ладно, черт с ним, но вот клоны... например про Firebird 2, читал/говорили что уже почти всю функциональность mssql поддерживает, и + что то исконно свое.
  • sniknik © (21.11.08 15:18) [22]
    > Но пример в начале этой ветке не является примером вложенных запросов?
    это что то типа функции в виде запроса... т.е. это вызывается на каждую итерацию.
    обработка идет построчно, а не блоком как с нормальным подзапросом.
  • Anatoly Podgoretsky © (21.11.08 16:40) [23]
    > sniknik  (21.11.2008 15:14:21)  [21]

    Врут, но бог с ними, а мне что надо было ждать более 10 лет?
    Вроде только где то в 7 версии появились встроеные запросы? Я точно не помню.
    FireBird хоть он и не применим в данном случае, тоже не сразу обзавелся встроеными запросами.
  • sniknik © (21.11.08 16:49) [24]
    ждать это конечно ;(...
    но вот тем кто начинает сейчас это повод хотя бы не использовать старые версии (если не говорить о переходе на что то иное ;), не представляю, как без них?
    не умом конечно понимаю, можно сделать процедуру, в ней цикл по курсору, т.е. добиться того же самого другими методами, но... это уже будет не язык общения с субд, а какой то суррогат с подменой самых нужных слов чем то искусственным.
  • Anatoly Podgoretsky © (21.11.08 18:57) [25]
    Я выбираю СУБД не по номеру версии, а под задачу, подойдет ли, и при том по очень многим факторам. Иногда выбирать не приходится, когда покупная программа, от которой нельзя отказаться или альтернативы еще хуже.
  • Loginov Dmitry © (22.11.08 00:24) [26]
    > Посоветуйте, пожалуйста, какой индекс тогда лучше сделать?
    >


    Как минимум на поля DSPTCH_PRDCA_ID, DSPTCH_DATE (это - обязательно!). По правилам разработки баз данных нужны первычные ключи DSPTCH_ID и PRDCA_ID.

    Кстати, почему DSPTCH_PRDCA_ID - SMALLINT, а PRDCA_ID - INTEGER?

  • > sniknik ©   (21.11.08 15:14) [21]
    >
    > > Увы, запрос не прошел. Курсор останавливается после join
    > и пишет:
    > тогда забудь.
    >
    > > ИБ и его клоны
    > IB ладно, черт с ним, но вот клоны... например про Firebird
    > 2, читал/говорили что уже почти всю функциональность mssql
    > поддерживает, и + что то исконно свое.

    в 2,5 встроили регулярные выражения. правда, она пока альфа(эта версия)
  • Виталий Панасенко(дом) (22.11.08 10:02) [28]
    а по теме: убери подзапрос. сделай либо ХП, либо перейди на ФБ 2,х, там можно выполнить блок. тогда запрос можно переделать так
    execute block
    as
    declare variable d date;
    begin
    select max(Dsptch_Date)
                          from Dsptch D2
                          where D2.Dsptch_Prdca_ID=D1.Dsptch_Prdca_ID into :d;

    SELECT Dsptch_Prdca_ID, Dsptch_PostOffice_ID, Dsptch_Plan,
         Dsptch_MMYY, Dsptch_Date
    FROM Dsptch D1, Prdca
    WHERE Dsptch_Prdca_ID = Prdca_ID
    and D1.Dsptch_Date = :d
    AND DSPTCH_MMYY = '1008'
    and Prdca_Pttrn = 'Вкл.'
    ORDER BY Dsptch_Prdca_ID, Dsptch_PostOffice_ID;
    suspend;
    end;
    Примерно так, но тут неправильно 100%..:-)
  • sniknik © (22.11.08 11:11) [29]
    > либо перейди на ФБ 2,х
    и проверь там возможность нормальных подзапросов, объединений с ними.

    > Примерно так, но тут неправильно 100%..:-)
    не знаю как синтаксис, но тут и по логике не то, тут выбираются все записи на одну максимальную дату. и вполне вероятно что это будет всего одна запись, либо все из одной накладной (например), смотря как там, при каких условиях,  у него идет изменение этого поля индивидуально карточками товара либо накладными.
    а по задаче, имхо, должны выбираться все товары с максимальной датой изменения каждого.
    если не так, и нужно именно то, что ты написал, то легко просто выполнить 2 запроса подряд, первым получить дату, и передать ее во второй параметром, и ничего менять в смысле версии будет не надо.
  • Виталий Панасенко(дом) (22.11.08 15:19) [30]

    > sniknik ©   (22.11.08 11:11) [29]

    я просто привел макет. а вся тормознутось оригинального запроса - из-за подзапроса...это "больное" место у ФБ(IB)... в плане скорости. лучше переписать в конструкцию for select do... .а в 2,х уже спокойно можно выполнить
    > sniknik ©   (21.11.08 13:50) [14]
 
Конференция "Базы" » Можно ли уменьшить время выполнения запроса [D7, IB6.x]
Есть новые Нет новых   [134477   +39][b:0][p:0]