为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8
【操作系统】:
【CPU】:
【问题描述】*:
我这边有一个SQL在达梦的客户端连接工具上执行花费的时间是0.036秒,
但是SQL在程序里面跑,花费的时间是3秒。
SELECT
"INST_ID"
FROM
"W_FORM_INST"
INNER JOIN "W_INST"
ON
(
"W_FORM_INST"."INST_ID" = "W_INST"."ID"
)
WHERE
(
"W_FORM_INST"."FIELD_NAME" = 'uniscid'
AND "W_FORM_INST"."FIELD_VALUE" = '00000000000'
AND "W_INST"."WF_ID" = 10
)
一个,2个对比的传入值是否相同,不同的值可能数据量不一样导致SSEK+BLKUP成本不一样导致耗时差异大,如果一致则忽略;
二个,查下系统视图看看是否有多个差异的执行计划,考虑几点,1)客户端运行的SQL是否和程序的完全一致,?和具体的值对DB来说是不同SQL;2)绑定值如果类型有差异,真实的执行计划可能同explain看到的不一样导致差异
select * from v$pln_history where top_sql_text like '%AND "W_FORM_INST"."FIELD_VALUE" =%';
我个人的怀疑点:
1.是程序上的jdbc不是最新,导致执行效率变慢,后面更换了,执行效率还是一样,排除jdbc包的问题
2.怀疑程序跑的过程中,整型的数值程序当字符串传入,导致查询程序过程中存在隐式转化,导致查询变慢。我在客户端故意把整型当字符串进行查询,SQL执行速度没有发生变化。排除了隐式转化带来的SQL性能下降可能。