Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2009, 21:24   #11
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Жесть.
У мну не такие большие познания SQL Server.
Я так понял это все только в нем работать будет или нет?
И еще , где можно найти литру по языку SQL поподробней. Т.е. видел кусок запорса в нете
Код:
 if @SrcObj='Д'
   begin
      select @RecCount=(@RecCount+count(*)) from MBDoc where NZ = @SrcRecID
      select @RecCount=(@RecCount+count(*)) from MBDocValR where NZDoc = @SrcRecID
       …
      select @RecCount=(@RecCount+count(*)) from MBDocValR7 where NZDoc = @SrcRecID
   end
   else
   begin
      if @SrcObj='А'
      begin
         select @RecCount=(@RecCount+count(*)) from MBAnalit where Analit = @SrcRecID
         select @RecCount=(@RecCount+count(*)) from MBAnValR where Analit = @SrcRecID
         …
         select @RecCount=(@RecCount+count(*)) from MBAnValR7 where Analit = @SrcRecID
      end
      else
      begin
         if @SrcObj='С'
            select @RecCount=(@RecCount+count(*)) from MBPlanAcc where XRecID = @SrcRecID
         else
         begin
             …
         end
      end
   end
   select @RecCount as 'RecCount'
Если строить запроса таким образом, что он будет содержать только то что должно выполняться, например при @SrcObj = 'Д' сразу запрос вида:
   begin
      select @RecCount=(@RecCount+count(*)) from MBDoc where NZ = @SrcRecID
      select @RecCount=(@RecCount+count(*)) from MBDocValR where NZDoc = @SrcRecID
       …
      select @RecCount=(@RecCount+count(*)) from MBDocValR7 where NZDoc = @SrcRecID
   end
Хотелось получше узнать про такие запросы с условиями и что там еще есть.
Спасибо!

Последний раз редактировалось psycho-coder; 12.07.2009 в 21:30.
psycho-coder вне форума Ответить с цитированием
Старый 12.07.2009, 21:36   #12
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

это текст хранимой процедуры
и все навороты зависят от задач, решаемых конкретной реализацией ХП
матчасть можно начать изучать с Мартина Грубера (в некоторых редакциях, Грабер) "Понимание SQL"
а дальше практика, практика, практика... (и между делом Джо Силко )
soleil@mmc вне форума Ответить с цитированием
Старый 12.07.2009, 22:53   #13
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Спасибо. Будем курить
psycho-coder вне форума Ответить с цитированием
Старый 13.07.2009, 12:35   #14
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

2 Serge_Bliznykov
погонял автотрассы на своем варианте запроса и на вашем на табличке с 5М записей и получил результат не в пользу ансишного варианта (СУБД Оракл 10)
soleil@mmc вне форума Ответить с цитированием
Старый 13.07.2009, 13:38   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну... спасибо большое за то, что Вы нашли время и возможность погонять запросы! Интересная информация!

Хочу отметить, что у меня не подвердились данные Вашего эксперимента...

Oracle 10.
табличка METERAGE, всего записей 120584
поле meterage_value текстовое.
A (первый count meterage_value='0') = 3197
B (meterage_value='?') 10732

вот два запроса:
Код:
 select
  var_A / (4 *var_B) l_Result
from(
select
  (select count (*) from meterage where meterage_value='0') var_A,
  (select count (*) from meterage where meterage_value='?') var_B 
from dual )
Код:
SELECT A / (4*B) FROM
(SELECT 
    sum(case meterage_value when '0' then 1 else 0 end) as A,
    sum(case meterage_value when '?' then 1 else 0 end) as B
  FROM METERAGE
  WHERE meterage_value in ('?','0')
)
NB. при первом запуске - время выполнения было больше, потом СУБД что-то у себя закешировало и теперь даже после отключения от Oracle и повторного подключения, время выполнения и того и другого запроса 0.047 секунды. (попровал на другом сервере, там Oracle 10 XE. Та же самая ситуация, первое выполнение запроса около 2 секунд, потом, и один и другой запрос выполняется за 0.031 секунды...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2009, 15:14   #16
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

здесь скорее нужно вести речь про планы запросов
потому что на моих данных с 4,2М записей первый запрос отрабатывает за 1,813 с, второй - за 3,110 с.

а топикстартеру еще нужно будет делать проверку или применять что-то типа NVL, чтобы избежать деления на ноль (всякое же бывает).

добавочка
чем больше кол-во данных в отборе приближается к общему числу записей в табл., тем дольше отрабатывает (есесно, индекс на поле висит)
в пределе, первый запрос отработал за 3,531 с, второй - 19,453 с

Последний раз редактировалось soleil@mmc; 13.07.2009 в 16:53.
soleil@mmc вне форума Ответить с цитированием
Старый 13.07.2009, 19:00   #17
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

soleil@mmc, попробывал ваш вариант - выдает ошибку Eole Exeception near ')'
psycho-coder, при попытке использования вышего варианта выдает, что переменные должны быть объявлены.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 13.07.2009, 19:43   #18
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Mixasik Посмотреть сообщение
psycho-coder, при попытке использования вышего варианта выдает, что переменные должны быть объявлены.
Попробуйте объявить переменные @auth и @usr
Код:
DECLARE @auth decimal
DECLARE @usr decimal
И после выполнить запрос

вот линки там поподробней расписано
переменные в sql
тут немного по типам данных в ms sql
psycho-coder вне форума Ответить с цитированием
Старый 13.07.2009, 20:08   #19
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Кажется понял, завтра буду пробывать, а пока что про SQL все прочитаю
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 13.07.2009 в 20:12.
Mixasik вне форума Ответить с цитированием
Старый 14.07.2009, 08:23   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

-- удалено как offtop ---

Последний раз редактировалось Serge_Bliznykov; 14.07.2009 в 12:55.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL подзапрос без сравнения, возможно ? DS75 БД в Delphi 7 03.06.2009 12:32
Поломал голову над SQL запросом из 5-ти таблиц. Возможно ли это? semnily SQL, базы данных 1 06.04.2009 12:24
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
проблему возможно решить с помощью хранимой процедуры на SQL? yulia БД в Delphi 8 24.05.2007 20:25