暂无图片
查询sql优化
我来答
分享
NIU
2023-02-14
查询sql优化

sqltext:

SELECT COUNT(1)
FROM ACT_CARD_BANK
WHERE CARD_NO IN
(
SELECT CARD_NO
FROM XSHTEST.XSH_CARD_BANK
WHERE BIN_NO IN ('731018', '731023', '731024', '731025', '731026', '731027')
AND STATUS = '06'
)
AND STATUS = '04';

执行计划如下:


涉及表的索引情况:



表的行数:

ACT_CARD_BANK  399187646

XSH_CARD_BANK  228751942

统计信息为2023-02-14重新收集,脚本如下:

exec dbms_stats.gather_table_stats(ownname => '$owner',tabname => 'XSH_CARD_BANK',estimate_percent => 0.1,method_opt=> 'for all indexed columns'); 

看看还有没有可以优化的地方,请多指教。

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
Thomas

把IDX_CARDNO_STA索引字段的顺序改为:STATUS,CARD_NO试试

暂无图片 评论
暂无图片 有用 0
NIU
题主
2023-02-15
顺序不同,会有影响吗? 我这边涉及的东西不少
四月二点半

请问题主这是哪家的数据库,是mysql, postgresql, sql-server, oracle还是db2,不同厂商的针对性优化不太一样

暂无图片 评论
暂无图片 有用 0
NIU
题主
2023-02-16
oracle数据库
四月二点半
答主
2023-02-16
看看这样性能会不会得到优化:SELECT COUNT(1) FROM ACT_CARD_BANK AS a INNER JOIN XSHTEST.XSH_CARD_BANK AS b ON a.CARD_NO = b.CARD_NO WHERE b.BIN_NO IN ('731018', '731023', '731024', '731025', '731026', '731027') AND b.STATUS = '06' AND a.STATUS = '04';
Thomas

我个人感觉,这个SQL没有优化余地了,所以建议改索引里的字段顺序,没准会使得数据读入量小一些。但,如果改索引牵扯面太广,那就呵呵吧。

暂无图片 评论
暂无图片 有用 0
NIU
题主
2023-02-16
明白了
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏