|
小弟刚刚被放到公司管ORACLE 的岗位上,让我去一个数据库上找慢SQL,我直接看ADDM,发现每次里面都有下面这样的SQL占用使用大量USER IO,占用大量的数据库时间,使用对调 SQL 完全不懂,请大家帮忙。。。
这是那条语句,看起来时查个视图
SELECT "A1"."EMPLOYEENO","A1"."CARDNO","A1"."BGNAME" FROM "RECRUIT_PERSONINFO_HN_V" "A1" WHERE "A1"."INCOMPANYDAY"=TRUNC(SYSDATE@!)
这是RECRUIT_PERSONINFO_HN_V视图的结构
CREATE OR REPLACE FORCE VIEW "RECRUIT_PERSON_LH"."RECRUIT_PERSONINFO_HN_V" ("CARDNO", "EMPLOYEENO", "PERSONNAME", "SE
X", "EMPIDNO", "INCOMPANYDAY", "PROVINCE", "PROVINCENAME", "REGION", "REGIONNAME
", "COUNTY", "COUNTYNAME", "LINE", "FACTORYID", "FACTORYNAME", "ADDRESSCODE", "A
DDRESSNAME", "PERSONTYPEID", "PERSONTYPENAME", "DATASOURCEID", "DATASOURCE", "GI
VEBG", "BGNAME", "SCHOOL", "COMEDATE", "PHONE", "CREATEDATE", "CREATEUSER") AS
select a.cardno,
a.employeeno,
a.personname,
a.sex,
a.empidno,
a.incompanyday,
a.province,
b.provincename,
a.region,
c.regionname,
a.county,
d.countyname,
a.line,
a.factoryid,
e.factoryname,
a.addresscode,
f.addressname,
a.persontypeid,
i.persontypename,
a.datasource datasourceid,
g.addressname datasource,
a.givebg,
h.bgname,
a.school,
a.comedate,
a.phone,
a.createdate,
a.createuser
from bs_person_information_his a,bs_province b,bs_region c,bs_county d,bs_factory e,bs_address f
,bs_datasource g,bs_bg h,bs_persontype i
where a.factoryid in ('FACTORY035','FACTORY999')
and a.province = b.provincecode(+)
and a.region = c.regioncode(+)
and a.county = d.countycode(+)
and a.factoryid = e.factoryid(+)
and a.addresscode = f.addresscode(+)
and a.datasource = g.addresscode(+)
and a.givebg = h.bgcode(+)
and a.persontypeid = i.persontypeid(+)
其中只有bs_person_information_his这表有400多万行,其他的只有20行左右,看了SELECT的执行计划全是hash jion 和全表扫描。。。
但是这样的东西需要调吗?改sql,加索引?
怎么说明问题啊?
|
|