sql两个表格优化过程!
sql两个表格优化过程!
两张表:SQJZ_GYLD社区服务(1147502条记录),SQJZ_GYLD_JZDX社区劳动参加人员列表(2422060条记录)
SQJZ_GYLD建立的索引有:
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 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:
发现使用了全表扫描;
优化一下:
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如下:
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论