查看: 15097|回复: 18

[SQL] 【讨论】麻烦帮看下这样SQL或者视图需不需要调整...

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-06-13 06:00:13
跳转到指定楼层
1#
发表于 2014-6-10 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟刚刚被放到公司管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,加索引?
怎么说明问题啊?





论坛徽章:
1
优秀写手
日期:2014-06-13 06:00:13
2#
 楼主| 发表于 2014-6-10 09:25 | 只看该作者
我表述的可能不是很清楚,请大家见谅啊.

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
3#
发表于 2014-6-10 09:29 | 只看该作者
计划发来看看?

使用道具 举报

回复
论坛徽章:
286
生肖徽章2007版:虎
日期:2014-06-23 20:17:04生肖徽章2007版:虎
日期:2014-09-18 12:50:09生肖徽章2007版:虎
日期:2014-11-14 14:21:28生肖徽章2007版:虎
日期:2014-06-23 20:42:17生肖徽章2007版:虎
日期:2014-06-23 20:42:17紫水晶
日期:2017-04-06 13:47:28红宝石
日期:2017-04-06 13:47:15秀才
日期:2017-04-06 13:42:06秀才
日期:2017-04-06 13:41:23秀才
日期:2017-03-28 15:59:38
4#
发表于 2014-6-10 09:46 | 只看该作者
bs_person_information_his 表 建INCOMPANYDAY 和factoryid  的组合索引 看看、

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-06-13 06:00:13
5#
 楼主| 发表于 2014-6-10 09:51 | 只看该作者
SQL> select * from table(dbms_xplan.display_cursor('a3zjumftjfzy3'));

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------
SQL_ID  a3zjumftjfzy3, child number 0
-------------------------------------
SELECT "A1"."EMPLOYEENO","A1"."CARDNO","A1"."BGNAME" FROM "RECRUIT_PERSONINFO_HN_V" "A1" WHERE
"A1"."INCOMPANYDAY"=TRUNC(SYSDATE@!)

Plan hash value: 2492492916

----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                      | Rows  | Bytes | Cost (%CPU)| Time  |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                           |       |       | 40262 (100)|       |
|*  1 |  HASH JOIN RIGHT OUTER       |                           |  1010 |   140K| 40262   (1)| 00:08:04 |
|   2 |   TABLE ACCESS FULL          | BS_COUNTY                 |   402 |  3216 |     3   (0)| 00:00:01 |
|*  3 |   HASH JOIN RIGHT OUTER      |                           |  1010 |   132K| 40259   (1)| 00:08:04 |
|   4 |    TABLE ACCESS FULL         | BS_REGION                 |    87 |   609 |     3   (0)| 00:00:01 |
|*  5 |    HASH JOIN RIGHT OUTER     |                           |  1010 |   125K| 40255   (1)| 00:08:04 |
|   6 |     TABLE ACCESS FULL        | BS_ADDRESS                |    62 |   434 |     3   (0)| 00:00:01 |
|   7 |     NESTED LOOPS OUTER       |                           |  1010 |   118K| 40252   (1)| 00:08:04 |
|*  8 |      HASH JOIN RIGHT OUTER   |                           |  1010 |   112K| 40252   (1)| 00:08:04 |
|   9 |       TABLE ACCESS FULL      | BS_FACTORY                |    41 |   492 |     3   (0)| 00:00:01 |
|* 10 |       HASH JOIN RIGHT OUTER  |                           |  1010 |   100K| 40248   (1)| 00:08:03 |
|  11 |        TABLE ACCESS FULL     | BS_BG                     |    35 |   595 |     3   (0)| 00:00:01 |
|* 12 |        HASH JOIN RIGHT OUTER |                           |  1010 | 85850 | 40245   (1)| 00:08:03 |
|  13 |         TABLE ACCESS FULL    | BS_PROVINCE               |     9 |    63 |     3   (0)| 00:00:01 |
|* 14 |         HASH JOIN RIGHT OUTER|                           |  1010 | 78780 | 40241   (1)| 00:08:03 |
|  15 |          TABLE ACCESS FULL   | BS_PERSONTYPE             |     4 |    12 |     3   (0)| 00:00:01 |
|* 16 |          TABLE ACCESS FULL   | BS_PERSON_INFORMATION_HIS |  1010 | 75750 | 40238   (1)| 00:08:03 |
|* 17 |      INDEX UNIQUE SCAN       | BS_DATASOURCE_P           |     1 |     6 |     0   (0)|       |
----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A"."COUNTY"="D"."COUNTYCODE")
   3 - access("A"."REGION"="C"."REGIONCODE")
   5 - access("A"."ADDRESSCODE"="F"."ADDRESSCODE")
   8 - access("A"."FACTORYID"="E"."FACTORYID")
  10 - access("A"."GIVEBG"="H"."BGCODE")
  12 - access("A"."PROVINCE"="B"."PROVINCECODE")
  14 - access("A"."PERSONTYPEID"="I"."PERSONTYPEID")
  16 - filter((INTERNAL_FUNCTION("A"."FACTORYID") AND "A"."INCOMPANYDAY"=TRUNC(SYSDATE@!)))
  17 - access("A"."DATASOURCE"="G"."ADDRESSCODE")

使用道具 举报

回复
论坛徽章:
3
咸鸭蛋
日期:2011-05-31 10:55:29灰彻蛋
日期:2011-07-22 09:31:10茶鸡蛋
日期:2013-02-19 21:05:14
6#
发表于 2014-6-10 10:05 | 只看该作者
如果表的数据变化不大,能不能把bs_person_information_his这个变成物化视图啊?

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
7#
发表于 2014-6-10 10:06 | 只看该作者
hh7yx 发表于 2014-6-10 09:46
bs_person_information_his 表 建INCOMPANYDAY 和factoryid  的组合索引 看看、

牛....

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
8#
发表于 2014-6-10 10:07 | 只看该作者
seebise 发表于 2014-6-10 09:51
SQL> select * from table(dbms_xplan.display_cursor('a3zjumftjfzy3'));

PLAN_TABLE_OUTPUT

按照楼上的建议试试:
BS_PERSON_INFORMATION_HIS
不应该走全表扫描

使用道具 举报

回复
论坛徽章:
169
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
9#
发表于 2014-6-10 23:17 | 只看该作者
同意楼上,INCOMPANYDAY 在前,试试。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-06-13 06:00:13
10#
 楼主| 发表于 2014-6-11 10:47 | 只看该作者
谢谢大家,我去试试...

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表