我已经创建了这个程序。程序消耗很多时间
DECLARE
cur SYS_REFCURSOR;
age_compare_group varchar(100);
state_compare varchar(100);
gender_compare varchar(100);
income_compare_groups varchar(100);
goal varchar(100);
valuestring varchar(100);
BEGIN
OPEN cur FOR
'select distinct a.age_compare_group, s.state_compare , g.gender_compare, i.income_compare_groups,goal_types.goal,goal_types.valuestring
from age_group a ,
state s ,
gender g ,
income_Group i ,
(select ''goal'' as GOAL, valuestring
from appldata
where dataname like ''GOAL_CAT%''
and datavalue in (select idcategory
from goal_categories
where typeuser = ''ECU''
and id_entity = ''B001''))goal_types';
LOOP
-- process each row one at a time
FETCH cur into age_compare_group,state_compare, gender_compare,income_compare_groups,goal,valuestring;
insert into temp_test values (state_compare ,age_compare_group);
END LOOP;
CLOSE cur;
END;
但是它花费很多时间来执行。
我只想知道这是怎么回事,我们可以通过反正优化它。
您的查询没有做任何连接。你正在创造一个笛卡尔的产品,在国家,性别,收入和嵌套选择之间 - 难怪它运行缓慢。另外:你根本不需要光标。但首先要让你的'选择'权利开始另外:开始使用明确的'JOIN'语法,而不是容易出错的隐式连接 - 如果你从一开始就这样做了,你就不会首先创建笛卡尔产品。 –
是的,因为这是我想要的。 –
你想*所有这些表之间的笛卡尔积?你明白那是什么吗?我非常怀疑你真的想要那样。如果你这样做了,那么为什么你使用'distinct'子句来消除由于笛卡尔积而创建的所有重复项? –