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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2013, 17:25   #1
wtfgod
 
Регистрация: 24.11.2011
Сообщений: 3
По умолчанию Найти различия в запросах

Добрый день!
Никак не могу справиться с заданием. Нужно найти оптимальный запрос
Код:
/*==============================================================*/
/* Table: C_DICTIONARY */
/*==============================================================*/
create table C_DICTIONARY (
ID NUMBER not null,
CODE VARCHAR2(20) not null
constraint CKC_CODE_C_DICTIO check (CODE = upper(CODE)),
NAME VARCHAR2(200),
MAIN_CVD_ID NUMBER,
TABLE_NAME VARCHAR2(200),
constraint PK_C_DICTIONARY primary key (ID)
)
/

/*==============================================================*/
/* Table: C_OBJECTS */
/*==============================================================*/
create table C_OBJECTS (
ID NUMBER not null,
CODE VARCHAR2(20) not null,
DATC DATE not null,
DIC_ID NUMBER,
STATUS NUMBER(3),
NOTE VARCHAR2(1000),
PARM VARCHAR2(4000),
SORT NUMBER,
NAME VARCHAR2(200),
NAM2 VARCHAR2(200),
constraint PK_C_OBJECTS primary key (ID)
);

/*==============================================================*/
/* Index: C_OBJECTS_01 */
/*==============================================================*/
create index C_OBJECTS_01 on C_OBJECTS (
DIC_ID ASC
);


alter table C_OBJECTS
add constraint FK_C_OBJECT_REF_18239_C_DICTIO foreign key (DIC_ID)
references C_DICTIONARY (ID);

--оцените 2 SQL запроса, возвращающих одинаковый набор данных
--какой из них является более оптимальным

select c.* from c_objects c
where GetMainCode(c.dic_id) = 'ORG';

select c.* from c_objects c
where c.dic_id = getdicid('ORG');

Последний раз редактировалось Stilet; 19.11.2013 в 17:43.
wtfgod вне форума Ответить с цитированием
Старый 19.11.2013, 17:34   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1-ый однозначно не оптимален - прогон по всем записям без использования индекса. Что такое getdicid?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.11.2013 в 17:37.
Аватар вне форума Ответить с цитированием
Старый 19.11.2013, 17:40   #3
wtfgod
 
Регистрация: 24.11.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Что такое getdicid?
Я в душе не грею. Все что было в задании,я скинул. Еще бы неплохо узнать,что такое GetMainCode
wtfgod вне форума Ответить с цитированием
Старый 19.11.2013, 17:46   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Еще бы неплохо узнать,что такое GetMainCode
Не особенно и важно - сам факт использования во WHERE поля в качестве аргумента некоторой функции заставляет по всей таблице шариться. 2-ой внешне оптимальнее - будет задействован индекс, но вот какие навороты внутри getdicid? Они могут похоронить всю оптимальность внешнего запроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.11.2013, 17:57   #5
wtfgod
 
Регистрация: 24.11.2011
Сообщений: 3
По умолчанию

Хорошо, спасибо!
wtfgod вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчеты в запросах Daelan Microsoft Office Access 5 03.12.2012 17:32
Найти различия в двух файлах kzld Microsoft Office Excel 1 14.12.2010 18:38
NULL в sql-запросах _SERGEYX_ БД в Delphi 5 27.10.2010 18:16
Пустые поля в запросах PetroPorsh Microsoft Office Access 1 16.10.2008 16:56
Возможна ли рекурсия в запросах eremin БД в Delphi 0 23.05.2007 15:54