为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm 8
【操作系统】:window 7
【CPU】:
【问题描述】:如下语句
select * from (select distinct bzxx.,asj.jbfxdwdm from tb_yw_bzxx bzxx left join tb_st_asj_zb asj on bzxx.asjbh=asj.asjbh and asj.xxsc_pdbz=‘0’ where 1=1)
此语句执行只需0.165秒
但同样的语句加上count就不行了
select count(*) from (select distinct bzxx.,asj.jbfxdwdm from tb_yw_bzxx bzxx left join tb_st_asj_zb asj on bzxx.asjbh=asj.asjbh and asj.xxsc_pdbz=‘0’ where 1=1)
会出现超时情况
执行计划如下图 图一为正常执行的,图二为加上count的
图一
图二
请问,如何改进优化语句 ,感谢!
不加count快是因为管理工具默认做了分页的效果,你这个语句没有有效的过滤条件,两个表的数据量都很大,做笛卡儿积的话,结果集超大还要distinct去重,可以试试下面这个hint
select /*+HAGR_DISTINCT_HASH_TABLE_SIZE(1000000)*/ count(*) from ...........
count() 把改成1试试呢