Конференция "Базы" » Оптимизация SQL запроса [FB 2.1]
 
  • DelphiN! (22.12.10 09:08) [0]
    Доброго времени суток!
    Помогите оптимизировать следующий запрос

    select

       cast(time_ as date),
       (select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date)),

       (select sum(summ_) from casebase where
       (period_ = (select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date))))"SUM"

       from casebase MAIN
       where
       time_ > '01.12.2010' and time_ < '20.12.2010' and prim_ <> 'Login activated' and prim_ <> 'Login deactivated'
        and prim_ <> 'OUT' and prim_ <> 'BONUS'
       group by 1
       order by 1



    Можно ли из него сделать что-то наподобие

    select

       cast(time_ as date),
       (select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date)),

       (select sum(summ_) from casebase where
       (period_ = MAIN.2))"SUM"

       from casebase MAIN
       where
       time_ > '01.12.2010' and time_ < '20.12.2010' and prim_ <> 'Login activated' and prim_ <> 'Login deactivated'
        and prim_ <> 'OUT' and prim_ <> 'BONUS'
       group by 1
       order by 1



    То есть не делать повторный под запрос а указать условие period_ = "тому что в столбце 2"
  • Виталий Панасенко (22.12.10 09:14) [1]
    execute block?
  • DelphiN! (22.12.10 09:18) [2]

    > Виталий Панасенко   (22.12.10 09:14) [1]
    > execute block?


    А можно пример?
  • sniknik © (22.12.10 09:46) [3]
    гораздо существеннее выигрыш будет если внутренние под запросы будут использовать индексы. для чего убрать вычисления для сравниваемого поля (ведь cast(time_ as date) это "обрезание" времени из дататайма, правильно понял? или там строка потому как дальше условие со строкой (это не авто преобразование?) тогда сменить тип поля)
  • Виталий Панасенко (22.12.10 10:55) [4]
    execute block - аналог ХП.. только без модификации метаданных БД(ничего создавать не нужно, как в случае с хранимой процедурой)
  • evvcom © (31.12.10 14:24) [5]
    Как все любят делать для вычисления поля дополнительный селект, возвращающий одно значение! Чем джойны не устраивают? Я не профи в птичке, но в оракле делаю примерно так:

    select
     cast(MAIN.time_ as date), -- не меняю, может и так
     per.period_
     -- прочие поля
    from casebase MAIN
     left join (
       select distinct
         period_,
         cast(time_ as date) as time_
       from periodi) per
     on per.time_ = cast(MAIN.time_ as date)

 
Конференция "Базы" » Оптимизация SQL запроса [FB 2.1]
Есть новые Нет новых   [134431   +15][b:0][p:0.002]