|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一个相关的问题是第三方支持的资格问题,尽管直接来自厂商的支持和服务可以一定程度上减缓这个问题,但是,对于有的企业来说,通过强有力的本地化支持显然更有吸引力。oracle|功能
Oracle的in和notinDD功能理论
在良多软件体系中,体系的功能很打水平上无数据库的功能决意。之前也已经做过良多次关于功能方面的各类测试,出格是关于oracle的,我想到也应当纪录上去一部分,为人人共享。
事变产生在我们的体系从sqlserver移植到oracle,用户在一个查询的操纵上守候的工夫没法忍耐了,我们关于这个查询的处置与本来的体例一下,岂非sqlserver同oracle有甚么中央纷歧样么,让我们来看看oracle有甚么中央有成绩,大概是我们利用的有成绩?
营业成绩也许能够如许形貌,一个父表,一个子表,查询的了局是找到子表中没有利用父表id的纪录,这类情形估量良多体系城市扳连失掉。让我们来举一个例子:
表一:父表parent
编号
字段
范例
申明
1.
Id
Varchar2(10)
主键
2.
Name
Varchar2(100)
称号
表二:子表childen
编号
字段
范例
申明
1.
Id
Varchar2(10)
主键
2.
Pid
Varchar2(10)
主表的暗示
3.
Name
Varchar2(100)
称号
父表存储父亲,子表存储孩子,然后经由过程pid和父表联系关系,查询必要的了局是找到还没有有孩子的父亲。
我们来看一下查询语句的写法:
select*fromparentwhereidnotin(selectpidfromchilden)
这类尺度的写法在子表存在50万条的纪录的时分,查询工夫凌驾了10秒,远宏大于本来的sqlserver服务器的一秒。我在办理的时分想到了一个办法:
select*fromparentwhereidin
(selectidfromparentminusselectpidfromchilden)
一般了解下,这个语句应当加倍费时,可是现实完整出人意料,这条语句不单单在子表存在大批纪录的情形下速率优秀,在子表大批数据的情形下速率也十分的好,基础在1秒内完成。
这个了局能够很分明的证实oracle在子查询的外部处置的时分,利用in和notin的伟大区分,但愿用到这类体例的用户注重,也等候有人注释个中的成绩。
附录:测试数据的语句
--createparenttable
droptableparent;
createtableparent(idvarchar(10),namevarchar(100),primarykey(id));
--createchildentable
droptablechilden;
createtablechilden(idvarchar(10),pidvarchar(10),namevarchar(100),primarykey(id));
--Create/Recreateprimary,uniqueandforeignkeyconstraints
altertableCHILDEN
addconstraintfk_123foreignkey(PID)
referencesparent(ID);
--addtestdateforparent
--Createdon2004-11-29byGUIP
declare
--Localvariableshere
iinteger;
begin
--Teststatementshere
i:=0;
deletefromparent;
loop
i:=i+1;
dbms_output.put_line(i);
insertintoparent(id,name)values(i,name||i);
if(imod100=0)then
commit;
endif;
exitwheni>1000;
endloop;
commit;
end;
--addtestdateforchilden
--Createdon2004-11-29byGUIP
declare
--Localvariableshere
iinteger;
jinteger;
begin
--Teststatementshere
i:=0;
deletefromchilden;
loop
j:=0;
loop
i:=i+1;
j:=j+1;
insertintochilden(id,pid,name)values(i,j,name||j);
if(imod100=0)then
commit;
endif;
exitwhenj>=50;
endloop;
exitwheni>=10000*50;
endloop;
commit;
end;
无疑希望员工得到系统、有深度的培训,显然MySQL在这一点上还做得很不够。 |
|