ITPub博客

首页 > 数据库 > Oracle > 人事说查询很慢解决!

人事说查询很慢解决!

原创 Oracle 作者:penglele2009 时间:2011-02-16 15:30:46 0 删除 编辑

人事今天打工资单说很慢,半天没有查询出来!我的第一反应就是要找出 人事查询的“sql语句” 和执行计划。

1:现场看查询画面

2:确定查询时间,返回服务器,使用v$session,定位登录时间。

select * from v$session

通过 username, logon_tiem 就可以定位登录的人事

3:通过 v$session找出sql_hash_value 和 paddress(有时候不出要这个参数)

4:通过v$sqlarea 就可以找出sql语句

select sql_text from v$sqlarea

where hash_value=' '

5:如果sql语句太长,可以通过v$sqltext

select * from v$sqltext

where hash_value=''

这里sql语句是从下至上显示。分行显示。

select 年月 , 编码 , 部门 , 姓名 , 出勤天数 , 病假天数 , 事假天数 , 其他假期天数 , 加班天数 , 工资标准 , 考核比重 , 考核系数 , 考核工资 , 基本工资 , 职务工资 , 加班工资 , 月份奖金 , 病假扣款 , 事假扣款 , 养老保险 , 失业保险 , 医疗保险 , 住房公积金 , 补扣工资差异 , 税前工资 , 应税工资 , 个人税扣款 , 个人税扣款1 , 宿舍扣款 , 手机扣款 , 其他补扣款 , 实发工资 , 工资标准 - nvl ( 职务工资 , 0 ) 工资_bas , 发薪日期 , 备注 , 公司
from 建达蓝德薪资单 A , hrmowner.SALARY_PRINT B
where a . 编码 = b . badge_no
and b . print = 'Y'
and a . 年月 = nvl ( : 输入年月 , a . 年月 )
and a . 部门 = nvl ( : 输入部门 , a . 部门 )
and a . 编码 = nvl ( : 输入编号 , a . 编码 )
order by 部门 , 编码

6:查看sql语句执行计划

7:我看到人事的sql语句,然后做了执行计划分析。

发现两个表都是 full_scan_table

8: 确定表的大小:

select count(*) from table_name

9:最后根据WHERE条件创建了index.

人事反馈查询非常快,几秒钟!

ok!

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22934571/viewspace-1046074/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-26

  • 博文量
    199
  • 访问量
    677247