-
Привет мастерам. Есть проблемка. Сделал запрос
CREATE OR ALTER VIEW VD_STR(
ID_CODE,
ID_OPT_1,
ID_OPT_2)
AS
SELECT STR.ID_CODE,
VDOPT_1.VD_OPTCODE||'-'||VDOPT_1.VD_OPTNAME,
VDOPT_2.VD_OPTCODE
FROM D_STORAGE STR, VD_OPTION VDOPT_1, VD_OPTION VDOPT_2
WHERE
VDOPT_1.ID_CODE = STR.ID_OPT_1 and
VDOPT_2.ID_CODE = STR.ID_OPT_2
GROUP BY
STR.ID_CODE,
VDOPT_1.VD_OPTCODE||'-'||VDOPT_1.VD_OPTNAME,
VDOPT_2.VD_OPTCODE
;
Но при попытке просмотра данных зависает на 1 мин, хотя в D_STORAGE всего 3 записи а в VD_OPTION - 3000.
-
Прошу прощения... немного не так )))
CREATE OR ALTER VIEW VD_STR(
ID_CODE,
ID_OPT_1,
ID_OPT_2,
VS_OPT_1,
VS_OPT_2
)
AS
SELECT DSTR.ID_CODE, DSTR.ID_OPT_1, DSTR.ID_OPT_2,
VDOPT_1.VD_OPTCODE||'-'||VDOPT_1.VD_OPTNAME,
VDOPT_2.VD_OPTCODE
FROM D_STORAGE DSTR, VD_OPTION as VDOPT_1, VD_OPTION as VDOPT_2
WHERE
VDOPT_1.ID_CODE = DSTR.ID_OPT_1 and
VDOPT_2.ID_CODE = DSTR.ID_OPT_2
GROUP BY
DSTR.ID_CODE, DSTR.ID_OPT_1, DSTR.ID_OPT_2,
VDOPT_1.VD_OPTCODE||'-'||VDOPT_1.VD_OPTNAME,
VDOPT_2.VD_OPTCODE
;
-
а план выполнения этой выборки какой?
-
1. зачем нужна группировка если нет ни одной агрегатной функции? это вместо дистинкта? типа сначала "перемножить" таблицы, получить все возможные варианты, а после исключит повторяющиеся (1 таблица участвует 2 раза, значит такие гарантированно будут) > всего 3 записи а в VD_OPTION - 3000. а сколько возвращает если без группировки?
2. почему объединение без джойнов в явном виде? база настолько устарела, что не позволяет?
-
а что там с индексами?.. да и GROUP BY как-то не понятно - зачем здесь.
|