Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имя таблицы входящим параметром, Передача в проц имени табл вход парам 
V
    Опции темы
Akella
Дата 28.5.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Alkor135 @  28.5.2009,  17:03 Найти цитируемый пост)
А FireBird, где-нибудь показывает за какое время он выполнил процедуру?

а как FireBird ПОКАЖЕТ?
PM MAIL   Вверх
Deniz
Дата 29.5.2009, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Alkor135 @  28.5.2009,  20:03 Найти цитируемый пост)
Зато очень сильно отличаюся по скорости две моих других процедуры.

Цитата(Alkor135 @  28.5.2009,  20:03 Найти цитируемый пост)
Хотя эти процедуры не совсем равнозначны.
честно говоря подробно не разбирался, но такое ощущение, что они еще и результат разный выдают.
Та, что с min ищет минимальную дату на прошлой неделе, а другая "смотрит" вперед по датам.
Даже твой "страшный" select с extract'ом можно оптимизировать до неузнаваемости. Например, сначала вычислить период прошлой недели (дата начала и дата окончания недели), от переданной даты. А потом 
Код
select ... from ... where da between :d1 and :d2
использование индекса гарантировано, в отличии от where extract, там индекс по дате не используется.
Цитата(Alkor135 @  28.5.2009,  20:03 Найти цитируемый пост)
Может действительно скорость выполнения не от использования min и max зависит? 
Тогда подскажите отчего она такая разная?
каждый запрос в процедуре нужно оптимизировать.
Подсказка, если удается добиться использования уникального индекса, скорость возрастает на порядки, неуникальный хороший индекс тоже поможет.
А вообще читай www.ibase.ru
и вот например FAQ: оптимизация запросов


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Alkor135
Дата 29.5.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(Gluttton @ 28.5.2009,  17:14)
Цитата

А FireBird, где-нибудь показывает за какое время он выполнил процедуру?


Ну здрасте, а скриншот ты с чего делал?! Не с IBExpert'а?!
Вот в нём при выполнении запроса в нижней части активного окна появляется Memo-поле, куда выводиться код ошибки, план запроса и время выполнения запроса! smile !

Извиняйте, ребята. Я еще совсем мало с IBExpert работаю.
Вот смотрю на экран и не вижу этого memo поля.
Ткните меня носом, где оно должно быть?
А может я что-то в настройках не включил?
user posted image

PM MAIL   Вверх
Alkor135
Дата 29.5.2009, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(Akella @ 28.5.2009,  17:31)
Цитата(Alkor135 @  28.5.2009,  17:03 Найти цитируемый пост)
А FireBird, где-нибудь показывает за какое время он выполнил процедуру?

а как FireBird ПОКАЖЕТ?

Akella, действительно я глупость написал. 
А думал о IBExpert.
PM MAIL   Вверх
Gluttton
Дата 29.5.2009, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Цитата

Извиняйте, ребята. 

Да ради Бога smile ...
Цитата

Вот смотрю на экран и не вижу этого memo поля.
Ткните меня носом, где оно должно быть?

Да... Я тоже удивился, что его нету... Что бы появилось нужно нажать на кнопочку "Edit" (после выполнения процедуры) и искать это поле внизу.
А ещё можно выполнять процедуры несколько иначе. Создать новый скрипт (кнопочка обведена желтым) вставить в него код вызова процедуры и выполнить.

И ещё... У Вас нет тригеров и генераторов - это хоть и возможно, но весьма подозритьельно, а вот то что нет доменов - это однозначно, не то что бы не правильно, а скорее не оптимально с точки зрения удобства работы с кодом.

user posted image

Это сообщение отредактировал(а) Gluttton - 29.5.2009, 07:50


--------------------
Слава Україні!
PM MAIL   Вверх
Alkor135
Дата 29.5.2009, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Deniz, спасибо за мысли и за ссылки. 
Поразбираюсь на досуге. smile
PM MAIL   Вверх
Deniz
Дата 29.5.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Alkor135 @  29.5.2009,  10:07 Найти цитируемый пост)
Вот смотрю на экран и не вижу этого memo поля.
Ткните меня носом, где оно должно быть?
читаем внимательнее
Цитата(Gluttton @  28.5.2009,  20:14 Найти цитируемый пост)
Вот в нём при выполнении запроса в нижней части активного окна появляется Memo-поле...
именно запроса, а не процедуры.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Alkor135
Дата 29.5.2009, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Gluttton, триггеров действительно нет, но думаю они и не нужны мне. 
Ведь событий у таблиц не будет, мне не нужны в них изменения.

Насчет генераторов... не вижу в них практической пользы.

Насчет Доменов, вообще не понял, что это за зверь и с чем его едят?

Попробовал после выполнения процедуры переключиться на вкладку Edit, но поля со временем выполнения процедуры опять не нашел:
user posted image

Через SQL редактор, тестировать на скорость каждый запрос в процедуре, мне кажется долго, но если необходимость возникнет, то сделаю.
Спасибо за подсказку.
PM MAIL   Вверх
Alkor135
Дата 29.5.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Deniz, да, теперь я понял, что только в запрсах можно посмотреть время выполнения.
А вот было бы в процедурах, было бы замечательно.
Вот как организовать запрос у:

  while (NOT exists (SELECT da FROM audcad WHERE da = :p_input_date_min))  do
    p_input_date_min = p_input_date_min + 1;

PM MAIL   Вверх
Gluttton
Дата 29.5.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



 smile 
Это конечно не относиться к теме, но раз сказал "А", то говорю и "В".
Отсутствие тригеров и генераторов - признак того, что в БД отсутствуют поля AUTOINCREMENT в нотации Access, которые приверженцы сурогатных ключей используют в качестве первичных ключей. Но это совершенно не догма.
Домены, не знаю как это будет правильно, но если своими словами, то это именованый пользовательский тип данных, например:
определив однажды домен:
Код

CREATE DOMAIN NAME      AS VARCHAR(200);
CREATE DOMAIN ID        AS BIGINT             NOT NULL;
CREATE DOMAIN INFO      AS VARCHAR(900);


можно его многократно использовать в дальнейшем (при создании таблиц):
Код

CREATE TABLE TYPE
(
    ID          ID,
    ID_SCALE    ID,
    ID_GROUP    ID,
    CODE    CODE,
    NAME        NAME,
    INFO        INFO
);


Цитата

А вот было бы в процедурах, было бы замечательно.


Ну дык
Цитата

А ещё можно выполнять процедуры несколько иначе. 
Создать новый скрипт (кнопочка обведена желтым) вставить в него код вызова процедуры и выполнить.


Это сообщение отредактировал(а) Gluttton - 29.5.2009, 09:01


--------------------
Слава Україні!
PM MAIL   Вверх
Akella
Дата 29.5.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Alkor135, в настройках эксперт включи MDI интерфейс.
меню Настройки->Настройки среды-> слева вверху Тип интерфейса->многодокументальный.
Нажми Ок.
Разверни на всю правое окно. 
user posted image
красным я обвёл, как посмотреть параметры исполненного запроса: план, сколько памяти, время...
PM MAIL   Вверх
Deniz
Дата 29.5.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Так же можно просто сделать select из процедуры
Код
select * from proc_name(param1, param2, ..., paramN)

Согласен с Gluttton, отсутствие доменов, генераторов и триггеров настораживает.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Alkor135
Дата 29.5.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Gluttton, я так понял, что триггеры и генераторы мне не нужны. 
Зачем мне суррогатные ключи, скорости они не прибавят. smile

Спасибо за просвящение с Доменами, теперь их использовать мне тоже не имеет смысла, ведь таблицы уже созданы.

Добавлено @ 12:52
Akella, спасибо за подсказки по настройке интерфейса. Оказывается IBExpert и по русски может smile .

Akella, Gluttton, Deniz, попробовал я выполнить процедуру из SQL редактора.
Все равно время выполнения не показывает.
user posted image

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

Это сообщение отредактировал(а) Alkor135 - 29.5.2009, 12:54
PM MAIL   Вверх
Alkor135
Дата 29.5.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Я свой вопрос решил.
Правда не имя таблицы загонял как входящий параметр,
а вклеивал начало вызываемой процедуры(через Query) из Delphi.

Код

  i := 1;
  while i<>15 do
    begin
      if i=1 then P := P_1;
      if i=2 then P := P_2;
      if i=3 then P := P_3;
      if i=4 then P := P_4;
      if i=5 then P := P_5;
      if i=6 then P := P_6;
      if i=7 then P := P_7;
      if i=8 then P := P_8;
      if i=9 then P := P_9;
      if i=10 then P := P_10;
      if i=11 then P := P_11;
      if i=12 then P := P_12;
      if i=13 then P := P_13;
      if i=14 then P := P_14;

      IBQuery2.Active:=False;
      IBQuery2.SQL.Clear;
      IBQuery2.SQL.ADD('SELECT p_pair, p_da_min, p_ti_min, p_op, p_da_max, p_ti_max, p_cl, p_point, p_point_mod');
      IBQuery2.SQL.ADD('FROM '+P+'_PROC_END (:P0, :P1, :P2, :P3)');
      IBQuery2.Params.Items[0].AsString := P_INPUT_DATE_MIN;
      IBQuery2.Params.Items[1].AsString := P_INPUT_TIME_MIN;
      IBQuery2.Params.Items[2].AsString := P_INPUT_DATE_MAX;
      IBQuery2.Params.Items[3].AsString := P_INPUT_TIME_MAX;
      IBQuery2.Active:=True;

        StringGrid2.Cells[0,i] := IBQuery2.Fields.Fields[0].Value;
        StringGrid2.Cells[1,i] := IBQuery2.Fields.Fields[1].Value;
        StringGrid2.Cells[2,i] := IBQuery2.Fields.Fields[2].Value;
        StringGrid2.Cells[3,i] := IBQuery2.Fields.Fields[3].Value;
        StringGrid2.Cells[4,i] := IBQuery2.Fields.Fields[4].Value;
        StringGrid2.Cells[5,i] := IBQuery2.Fields.Fields[5].Value;
        StringGrid2.Cells[6,i] := IBQuery2.Fields.Fields[6].Value;
        StringGrid2.Cells[7,i] := IBQuery2.Fields.Fields[7].Value;
        StringGrid2.Cells[8,i] := IBQuery2.Fields.Fields[8].Value;
        IBQuery1.Next();
        StringGrid2.RowCount := i+1;
        i := i+1;
    end;


Всем Большое Спасибо!!!
По Вашим советам позже еще пооптимизирую SQL код.
Всем бы поставил плюсики, но говорят у меня еще постов для этого мало :( .

Это сообщение отредактировал(а) Alkor135 - 29.5.2009, 14:19
PM MAIL   Вверх
Akella
Дата 29.5.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Alkor135 @  29.5.2009,  12:42 Найти цитируемый пост)
А может это ограничения персональной версии. 

Первый раз слышу про персональную версию.
Скачай полную
http://forum.vingrad.ru/index.php?showtopi...t&p=1866918
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.