SELECT /*RULE*/ T2.COMPCODE,
T2.USERNAME,
T2.NAME,
T2.EMAIL,
T2.CREATIONDATE,
T2.MODIFICATIONDATE,
T2.DEPTCODE,
SUBSTR(T1.DEPTNAME, 3),
T2.PRIORITY,
T1.PRIORITY
FROM (SELECT DISTINCT A2.COMPCODE,
A2.DEPTCODE,
A2.PRIORITY,
SYS_CONNECT_BY_PATH(A2.DEPTNAME, '::') AS DEPTNAME
FROM (SELECT COMPCODE, DEPTCODE
FROM OFDEPARTMENT
WHERE PARENTDEPTCODE IS NULL) A1,
OFDEPARTMENT A2
START WITH A2.DEPTCODE = A1.DEPTCODE
CONNECT BY A2.PARENTDEPTCODE = PRIOR A2.DEPTCODE) T1,
OFUSER T2
WHERE T2.COMPCODE = 'test1865'
AND T2.USERTYPE = 0
AND T1.COMPCODE = T2.COMPCODE
AND T1.DEPTCODE = T2.DEPTCODE
and rownum <= 150这个语句很慢,谁能帮我优化一下,
其中SELECT DISTINCT A2.COMPCODE,
A2.DEPTCODE,
A2.PRIORITY,
SYS_CONNECT_BY_PATH(A2.DEPTNAME, '::') AS DEPTNAME
FROM (SELECT COMPCODE, DEPTCODE
FROM OFDEPARTMENT
WHERE PARENTDEPTCODE IS NULL) A1,
OFDEPARTMENT A2
START WITH A2.DEPTCODE = A1.DEPTCODE
CONNECT BY A2.PARENTDEPTCODE = PRIOR A2.DEPTCODE
这个递归语句很慢 如果数据量很大 的话-- Create table
create table OFUSER
(
USERNAME VARCHAR2(64) not null,
PLAINPASSWORD VARCHAR2(32),
ENCRYPTEDPASSWORD VARCHAR2(255),
NAME VARCHAR2(100),
EMAIL VARCHAR2(100),
CREATIONDATE CHAR(15) default 0 not null,
MODIFICATIONDATE CHAR(15) default 0 not null,
COMPCODE VARCHAR2(32) default -1 not null,
DEPTCODE VARCHAR2(32) default -1 not null,
USERCODE VARCHAR2(32),
USERTYPE VARCHAR2(2) default 0 not null,
COMMTYPE VARCHAR2(2),
AUTHTYPE VARCHAR2(2),
CAPATH VARCHAR2(255),
PRIORITY VARCHAR2(16) default -1 not null,
BIZUSERID VARCHAR2(32),
SYNCDATE VARCHAR2(16),
SYNCFLAG VARCHAR2(2),
OPERATORID VARCHAR2(2),
REMARK VARCHAR2(1024),
HIDE VARCHAR2(2) default 0 not null,
LASTLOGINDATE VARCHAR2(16),
ENABLED VARCHAR2(2) default 1 not null
)
tablespace OPENFIRE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table OFUSER
add constraint OFUSER_PK primary key (USERNAME)
using index
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table OFUSER
add constraint OFUSER_FK1 foreign key (COMPCODE)
references OFCOMPANY (COMPCODE) on delete cascade;
alter table OFUSER
add constraint OFUSER_FK2 foreign key (COMPCODE, DEPTCODE)
references OFDEPARTMENT (COMPCODE, DEPTCODE) on delete cascade;
-- Create/Recreate indexes
create index OFUSER_CDATE_IDX on OFUSER (CREATIONDATE)
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
用户表结构
-- Create table
create table OFDEPARTMENT
(
COMPCODE VARCHAR2(32) not null,
DEPTCODE VARCHAR2(32) not null,
DEPTNAME VARCHAR2(128) not null,
DEPTDESC VARCHAR2(255),
DEPTTYPE VARCHAR2(2),
AREACODE VARCHAR2(2),
STATUS VARCHAR2(2),
HIDE VARCHAR2(2) default 0 not null,
REMARK VARCHAR2(255),
PRIORITY VARCHAR2(16) default -1 not null,
OPERATORID VARCHAR2(32),
CREATEDATE VARCHAR2(15),
MODIFYDATE VARCHAR2(15),
BIZDEPTCODE VARCHAR2(32),
SYNCDATE VARCHAR2(16),
SYNCFLAG VARCHAR2(2),
ENABLED VARCHAR2(2) default 1 not null,
PARENTDEPTCODE VARCHAR2(32)
)
tablespace OPENFIRE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table OFDEPARTMENT
add constraint OFDEPARTMENT_PK primary key (COMPCODE, DEPTCODE)
using index
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table OFDEPARTMENT
add constraint OFDEPARTMENT_FK foreign key (COMPCODE)
references OFCOMPANY (COMPCODE) on delete cascade;
部门表结构谁能帮我优化一下,谢谢
T2.USERNAME,
T2.NAME,
T2.EMAIL,
T2.CREATIONDATE,
T2.MODIFICATIONDATE,
T2.DEPTCODE,
SUBSTR(T1.DEPTNAME, 3),
T2.PRIORITY,
T1.PRIORITY
FROM (SELECT DISTINCT A2.COMPCODE,
A2.DEPTCODE,
A2.PRIORITY,
SYS_CONNECT_BY_PATH(A2.DEPTNAME, '::') AS DEPTNAME
FROM (SELECT COMPCODE, DEPTCODE
FROM OFDEPARTMENT
WHERE PARENTDEPTCODE IS NULL) A1,
OFDEPARTMENT A2
START WITH A2.DEPTCODE = A1.DEPTCODE
CONNECT BY A2.PARENTDEPTCODE = PRIOR A2.DEPTCODE) T1,
OFUSER T2
WHERE T2.COMPCODE = 'test1865'
AND T2.USERTYPE = 0
AND T1.COMPCODE = T2.COMPCODE
AND T1.DEPTCODE = T2.DEPTCODE
and rownum <= 150这个语句很慢,谁能帮我优化一下,
其中SELECT DISTINCT A2.COMPCODE,
A2.DEPTCODE,
A2.PRIORITY,
SYS_CONNECT_BY_PATH(A2.DEPTNAME, '::') AS DEPTNAME
FROM (SELECT COMPCODE, DEPTCODE
FROM OFDEPARTMENT
WHERE PARENTDEPTCODE IS NULL) A1,
OFDEPARTMENT A2
START WITH A2.DEPTCODE = A1.DEPTCODE
CONNECT BY A2.PARENTDEPTCODE = PRIOR A2.DEPTCODE
这个递归语句很慢 如果数据量很大 的话-- Create table
create table OFUSER
(
USERNAME VARCHAR2(64) not null,
PLAINPASSWORD VARCHAR2(32),
ENCRYPTEDPASSWORD VARCHAR2(255),
NAME VARCHAR2(100),
EMAIL VARCHAR2(100),
CREATIONDATE CHAR(15) default 0 not null,
MODIFICATIONDATE CHAR(15) default 0 not null,
COMPCODE VARCHAR2(32) default -1 not null,
DEPTCODE VARCHAR2(32) default -1 not null,
USERCODE VARCHAR2(32),
USERTYPE VARCHAR2(2) default 0 not null,
COMMTYPE VARCHAR2(2),
AUTHTYPE VARCHAR2(2),
CAPATH VARCHAR2(255),
PRIORITY VARCHAR2(16) default -1 not null,
BIZUSERID VARCHAR2(32),
SYNCDATE VARCHAR2(16),
SYNCFLAG VARCHAR2(2),
OPERATORID VARCHAR2(2),
REMARK VARCHAR2(1024),
HIDE VARCHAR2(2) default 0 not null,
LASTLOGINDATE VARCHAR2(16),
ENABLED VARCHAR2(2) default 1 not null
)
tablespace OPENFIRE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table OFUSER
add constraint OFUSER_PK primary key (USERNAME)
using index
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table OFUSER
add constraint OFUSER_FK1 foreign key (COMPCODE)
references OFCOMPANY (COMPCODE) on delete cascade;
alter table OFUSER
add constraint OFUSER_FK2 foreign key (COMPCODE, DEPTCODE)
references OFDEPARTMENT (COMPCODE, DEPTCODE) on delete cascade;
-- Create/Recreate indexes
create index OFUSER_CDATE_IDX on OFUSER (CREATIONDATE)
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
用户表结构
-- Create table
create table OFDEPARTMENT
(
COMPCODE VARCHAR2(32) not null,
DEPTCODE VARCHAR2(32) not null,
DEPTNAME VARCHAR2(128) not null,
DEPTDESC VARCHAR2(255),
DEPTTYPE VARCHAR2(2),
AREACODE VARCHAR2(2),
STATUS VARCHAR2(2),
HIDE VARCHAR2(2) default 0 not null,
REMARK VARCHAR2(255),
PRIORITY VARCHAR2(16) default -1 not null,
OPERATORID VARCHAR2(32),
CREATEDATE VARCHAR2(15),
MODIFYDATE VARCHAR2(15),
BIZDEPTCODE VARCHAR2(32),
SYNCDATE VARCHAR2(16),
SYNCFLAG VARCHAR2(2),
ENABLED VARCHAR2(2) default 1 not null,
PARENTDEPTCODE VARCHAR2(32)
)
tablespace OPENFIRE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table OFDEPARTMENT
add constraint OFDEPARTMENT_PK primary key (COMPCODE, DEPTCODE)
using index
tablespace OPENFIRE
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table OFDEPARTMENT
add constraint OFDEPARTMENT_FK foreign key (COMPCODE)
references OFCOMPANY (COMPCODE) on delete cascade;
部门表结构谁能帮我优化一下,谢谢
解决方案 »
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
- 关于使用Database Configuation Assistant的问题。
- 怎样写一个符合我要求的oracle存储过程?
- where条件里面可否使用自定义的函数?
- 一个简单问题:以前MSSQL很熟练 SQL语句也算熟练 现在项目要换到Oracle心里打鼓
- 新手问题:Oracle 数据如何备份和还原
- Oracle8.1.5下用DBASSIST创建数据库失败,错误号ORA-01501
- 請問高手?
- 求教oracle的日期问题,在线等待,高分相送,急急急
- oracle net manager
- 请问如何用AIX SHELL实现数据库连接访问修改等操作
- 以Oracle考试题,Oracle不可用
AND T2.USERTYPE = 0
AND T1.COMPCODE = T2.COMPCODE
AND T1.DEPTCODE = T2.DEPTCODE
and rownum <= 150 改为
WHERE T1.COMPCODE = T2.COMPCODE
AND T1.DEPTCODE = T2.DEPTCODE
and rownum <= 150
and T2.COMPCODE = 'test1865'
AND T2.USERTYPE = 0 试试看.
3.这个sql,貌似可以不用表连接.楼主再考虑考虑,一个建议:SELECT DISTINCT A2.COMPCODE,
A2.DEPTCODE,
A2.PRIORITY,
SYS_CONNECT_BY_PATH(A2.DEPTNAME, '::') AS DEPTNAME
FROM (SELECT COMPCODE, DEPTCODE
FROM OFDEPARTMENT
WHERE PARENTDEPTCODE IS NULL) A1,
OFDEPARTMENT A2
START WITH A2.DEPTCODE = A1.DEPTCODE
CONNECT BY A2.PARENTDEPTCODE = PRIOR A2.DEPTCODE