​​sql两个表格优化过程!

  • A+
所属分类:SQL技巧

​​sql两个表格优化过程!

两张表:SQJZ_GYLD社区服务(1147502条记录),SQJZ_GYLD_JZDX社区劳动参加人员列表(2422060条记录)

SQJZ_GYLD建立的索引有:

​​sql两个表格优化过程!

 SQJZ_GYLD_JZDX建立的索引有:

​​sql两个表格优化过程!

 现要查询某区那天某个时刻之前参加过的劳动人员:

SELECT J.PNAME
FROM SQJZ_GYLD_JZDX J,SQJZ_GYLD D
WHERE D.ID = J.GYLD_ID
AND D.QUXIAN_ID='67840'
AND TO_CHAR(D.LAODONGRIQI, 'YYYY-MM-DD') = '2018-09-19'
AND TO_CHAR(J.QIANDAOSHIJIAN, 'YYYY-MM-DD HH24:MM:SS') <= '2018-09-19 18:00:00'
AND J.QIANTUISHIJIAN IS NULL

发现用了5.556秒,实在无法忍受,看下Explain Plan:

​​sql两个表格优化过程!

发现使用了全表扫描;

优化一下:

 SELECT J.PNAME
FROM SQJZ_GYLD D, SQJZ_GYLD_JZDX J
WHERE D.ID = J.GYLD_ID
AND D.QUXIAN_ID='67840'
AND D.LAODONGRIQI BETWEEN TO_DATE('2018-09-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND  TO_DATE('2018-09-19 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
AND TO_CHAR(J.QIANDAOSHIJIAN, 'YYYY-MM-DD HH24:MI:SS') <= '2018-09-19 18:00:00'
AND J.QIANTUISHIJIAN IS NULL

用了3.777秒,还是无法忍受,Explain Plan如下:

SQJZ_GYLD_JZDX表进行了全表扫描;

继续优化:

SELECT J.PNAME
FROM SQJZ_GYLD_JZDX J,SQJZ_GYLD D
WHERE D.ID = J.GYLD_ID
AND D.QUXIAN_ID='67840'
AND J.LTS>=TO_DATE('2018-09-19', 'YYYY-MM-DD')
AND TO_CHAR(D.LAODONGRIQI, 'YYYY-MM-DD') = '2018-09-19'
AND TO_CHAR(J.QIANDAOSHIJIAN, 'YYYY-MM-DD HH24:MM:SS') <= '2018-09-19 18:00:00'
AND J.QIANTUISHIJIAN IS NULL

用了0.015秒。

这里加了J.LTS>=TO_DATE('2018-09-19', 'YYYY-MM-DD'),注意LTS条件要对查询结果没有影响,但是却使SQJZ_GYLD_JZDX进行了索引扫描,Explain Plan如下:

​​sql两个表格优化过程!

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

​​sql两个表格优化过程!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: