查看: 5646|回复: 24

[SQL] 【大话IT】大神们,可以帮忙看下这条SQL如何优化吗?

[复制链接]
论坛徽章:
2
优秀写手
日期:2015-02-01 06:00:05优秀写手
日期:2015-02-12 06:00:14
发表于 2015-3-5 13:19 | 显示全部楼层 |阅读模式

  1.   SELECT h.prescribe_dept,                                             
  2.          h.antimicrobial_level,                                      
  3.          COUNT (DECODE (h.cs, '是', h.name)) cs_y,
  4.          COUNT (DECODE (h.cs, '否', h.name)) cs_n
  5.     FROM (  SELECT f.sick_id sick_id,                                 
  6.                    f.visit_number visit_number,                        
  7.                    MAX (f.prescribe_dept) prescribe_dept,               
  8.                    MAX (f.doctor) doctor,                             
  9.                    MAX (f.name) name,                                 
  10.                    MAX (f.start_time) start_time,                  
  11.                    MAX (f.prescribe_txt) prescribe_txt,               
  12.                    MAX (f.prescribe_code) prescribe_code,            
  13.                    MAX (
  14.                       DECODE (f.antimicrobial_level,
  15.                               '10', '一级',
  16.                               '20', '二级',
  17.                               '30', '三级'))
  18.                       antimicrobial_level,                           
  19.                    MAX (DECODE (g.cs, '1', '是', '否')) cs   
  20.               FROM (SELECT c.sick_id sick_id,                        
  21.                            c.visit_number visit_number,               
  22.                            c.prescribe_dept prescribe_dept,            
  23.                            c.doctor doctor,                           
  24.                            e.name name,                              
  25.                            c.start_time start_time,                 
  26.                            c.prescribe_txt prescribe_txt,            
  27.                            c.prescribe_code prescribe_code,           
  28.                            d.antimicrobial_level antimicrobial_level
  29.                       FROM antibiotics_use_record a,
  30.                            prescribe_record c,
  31.                            physic_dict_table d,
  32.                            sick_basic_info e
  33.                      WHERE     c.antibiotics_seq = a.sequence_no
  34.                            AND c.prescribe_code = d.physic_code
  35.                            AND c.sick_id = e.sick_id
  36.                            AND d.antimicrobial_level IS NOT NULL
  37.                            AND a.use_purpose = '1'
  38.                            AND a.record_date >=
  39.                                   TO_DATE ('2011/5/10', 'yyyy-mm-dd')
  40.                            AND a.record_date <
  41.                                   TO_DATE ('2014/5/11', 'yyyy-mm-dd')) f,
  42.                    (SELECT c.sick_id sick_id,                        
  43.                            c.visit_number visit_number,               
  44.                            DECODE (c.prescribe_txt, NULL, '0', '1') cs
  45.                       FROM prescribe_record c
  46.                      WHERE (   c.prescribe_txt LIKE '%培养%'
  47.                             OR c.prescribe_code = '56239'
  48.                             OR c.prescribe_code = '60308'
  49.                             OR c.prescribe_code = '3856'
  50.                             OR c.prescribe_code = '3857')) g      
  51.              WHERE     f.sick_id = g.sick_id(+)
  52.                    AND f.visit_number = g.visit_number(+)
  53.           GROUP BY f.sick_id, f.visit_number) h
  54. GROUP BY h.prescribe_dept, h.antimicrobial_level;
复制代码
/*4张表的数据量*/                        
------------------------ ----------
antibiotics_use_record        53042
prescribe_record            1074588
physic_dict_table              2293
sick_basic_info              210132

13131.png

PRESCRIBE_DEPT ANTIMICROBIAL_LEVEL       CS_Y       CS_N
-------------- ------------------- ---------- ----------
40601          二级                         245         16
41001          一级                          96         35
30108          二级                          59         13
41401          二级                          57         15
40401          一级                           5          5
40801          二级                           6         36
42102          一级                          50         13
41001          二级                         112         73
41201          一级                          43          8
40801          一级                          13         41
41301          一级                           7         15
41402          二级                           6          2
41901          一级                           2          1
41401          一级                          75         54
41601          一级                          59         32
40901          一级                           7         89
40601          三级                          22          0
42101          二级                          34        113
40902          一级                           1          9
41301          二级                           0          7
40902          三级                           0          2


论坛徽章:
127
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2015-3-5 13:43 | 显示全部楼层
贴一下目前的执行计划和统计数据

使用道具 举报

回复
论坛徽章:
2
优秀写手
日期:2015-02-01 06:00:05优秀写手
日期:2015-02-12 06:00:14
 楼主| 发表于 2015-3-5 14:19 | 显示全部楼层
bell6248 发表于 2015-3-5 13:43
贴一下目前的执行计划和统计数据

已经发了。

使用道具 举报

回复
论坛徽章:
127
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2015-3-5 15:01 | 显示全部楼层
现对5个表进行分析一下, 收集一下信息, 另外目前对于数据量最多的表进行了2次FTS, 其他的表也都是FTS,你分析一下,是否目前的表已经建立了合理的INDEX

使用道具 举报

回复
论坛徽章:
2
优秀写手
日期:2015-02-01 06:00:05优秀写手
日期:2015-02-12 06:00:14
 楼主| 发表于 2015-3-5 15:24 | 显示全部楼层
bell6248 发表于 2015-3-5 15:01
现对5个表进行分析一下, 收集一下信息, 另外目前对于数据量最多的表进行了2次FTS, 其他的表也都是FTS,你 ...

喔。我在看看

使用道具 举报

回复
论坛徽章:
2
优秀写手
日期:2015-02-01 06:00:05优秀写手
日期:2015-02-12 06:00:14
 楼主| 发表于 2015-3-5 15:32 | 显示全部楼层
bell6248 发表于 2015-3-5 15:01
现对5个表进行分析一下, 收集一下信息, 另外目前对于数据量最多的表进行了2次FTS, 其他的表也都是FTS,你 ...

FTS啥意思、、、

使用道具 举报

回复
认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2015-3-5 15:38 | 显示全部楼层
137927 发表于 2015-3-5 15:32
FTS啥意思、、、

全表扫描 Full Table Scans

使用道具 举报

回复
论坛徽章:
5
灰彻蛋
日期:2012-11-13 19:31:45本田
日期:2013-08-05 14:05:06阿斯顿马丁
日期:2013-11-06 17:46:58问答徽章
日期:2013-11-12 17:32:10保时捷
日期:2013-12-02 17:18:42
发表于 2015-3-5 16:24 | 显示全部楼层
目前看执行计划没问题。
如果表分析正确的话,C表prescribe_record  应该被过滤掉很多数据。考虑分区?或者关联的字段索引。

目前看所有连接都是hash连接,问题不大。

想快只能建立索引之类的操作了。

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-3-5 22:39 | 显示全部楼层
MAX (DECODE (g.cs, '1', '是', '否')) cs   

COUNT (DECODE (h.cs, '否', h.name)) cs_n

为什么转2遍,还要用汉字?

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-3-5 22:41 | 显示全部楼层
〇〇 发表于 2015-3-5 22:39
MAX (DECODE (g.cs, '1', '是', '否')) cs   

COUNT (DECODE (h.cs, '否', h.name)) cs_n

看漏了,还有第3遍
DECODE (c.prescribe_txt, NULL, '0', '1') cs

使用道具 举报

回复

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

本版积分规则 发表回复

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