注册

【查询结果重用】的问题

阿杰升级路 2024/05/25 591 6

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8 64位 1-3-100-2023.12.26-213242-20081-ENT
【操作系统】:win10
【CPU】:

CPU名称    英特尔 Core i5-10400 CPU @ 2.90GHz 六核
厂商    GenuineIntel
核心数    6
默认频率    2901 MHz
外频    100 MHz
当前频率    800 MHz
二级缓存    1536 KB
三级缓存    12288 KB
CPU电压    0.900 V
CPU序列号    BFEBFBFF000A0653
数据宽度    64
指令集    MMX,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,EM64T
扩展版本    Ext.Family 0  Ext.Model 10

【优化过程描述】*:

查询结果集重用

在优化sql语句查询时,根据《达梦系统管理员手册》查询优化——>22.9 查询计划重用中的描述,对查询计划重用的参数USE_PLN_POOL设置为了1查询结果集重用参数RS_CAN_CACHE是0(我好像没更改,默认值就是0)

可以通过在 SQL 语句中设置 “RESULT_CACHE”或“NO_RESULT_CACHE” HINT 手动指示查询的结果集是否缓存

SELECT  /*+  RESULT_CACHE ,ORDER(dl, xl, pm,fd),USE_HASH(dl,xl), USE_HASH(xl,pm),USE_NL_WITH_INDEX(pm,code)*/     dl.Code AS JiJDLBH, dl.Name AS JiJDL, xl.Code AS JiJXLBH, xl.Name AS JiJXL, 
                pm.Code AS JiJPMBH, pm.Name AS JiJPM, pm.IsSubsidyMtype, fd.Code AS JiJFDBH, fd.Name AS JiJFD, fd.Year, 
                fd.Batch, fd.State, fd.AreaCode, fd.GuoJBT, fd.GuoJBT_TeSX, fd.ShengJBT, fd.ShengJBT_TeSX, fd.ShiJBT, fd.XianJBT, 
                fd.ShiJBT_TeSX, fd.XianJBT_TeSX, fd.Id AS FDID, fd.MKind, fd.IsCollectInfo, fd.Para, pm.IschkExhaustSmoke, fd.Unit, 
                fd.isSubsidyPending, pm.MCerttype AS pmcerttype,fd.MCerttype AS fdcerttype, fd.Remark, ISNULL(fd.IsSupEqu, 0) AS IsSupEqu, 
                ISNULL(fd.SupEquName, '') AS SupEquName, ISNULL(fd.SupEquGuoJBT, 0) AS SupEquGuoJBT, 
                ISNULL(fd.SupEquShengBT, 0) AS SupEquShengBT, ISNULL(fd.SupEquUnit, '') AS SupEquUnit,fd.IsShengAdmissibility as IsMachineTypeAdmissibility
FROM      TD_MACHINE_TYPE_PUSH AS dl INNER JOIN
                TD_MACHINE_TYPE_PUSH AS xl ON dl.Code = LEFT(xl.Code, 2) AND LEN(xl.Code) = 4 AND dl.AreaCode = xl.AreaCode AND 
                dl.Year = xl.Year AND dl.Batch = xl.Batch 
                INNER JOIN TD_MACHINE_TYPE_PUSH AS pm ON xl.Code = LEFT(pm.Code, 4) AND LEN(pm.Code) = 6 AND 
                xl.AreaCode = pm.AreaCode AND xl.Year = pm.Year AND xl.Batch = pm.Batch 
				LEFT OUTER JOIN
                TD_MACHINE_TYPE_PUSH AS fd ON pm.Code = LEFT(fd.Code, 6) AND LEN(fd.Code) = 8 AND pm.AreaCode = fd.AreaCode AND pm.Year = fd.Year AND pm.Batch = fd.Batch
WHERE isnull(fd.IsCollectInfo,0)=0;

第一次执行结果

image.png

第二次执行结果

image.png

问 题:发现没有什么变化,一样的慢

个人解决过程:经过网上查询,发现说要对sql搜集统计信息

SP_SQL_STAT_INIT ('SELECT  /*+  RESULT_CACHE ,ORDER(dl, xl, pm,fd),USE_HASH(dl,xl), USE_HASH(xl,pm),USE_NL_WITH_INDEX(pm,code)*/   dl.Code AS JiJDLBH, dl.Name AS JiJDL, xl.Code AS JiJXLBH, xl.Name AS JiJXL, 
                pm.Code AS JiJPMBH, pm.Name AS JiJPM, pm.IsSubsidyMtype, fd.Code AS JiJFDBH, fd.Name AS JiJFD, fd.Year, 
                fd.Batch, fd.State, fd.AreaCode, fd.GuoJBT, fd.GuoJBT_TeSX, fd.ShengJBT, fd.ShengJBT_TeSX, fd.ShiJBT, fd.XianJBT, 
                fd.ShiJBT_TeSX, fd.XianJBT_TeSX, fd.Id AS FDID, fd.MKind, fd.IsCollectInfo, fd.Para, pm.IschkExhaustSmoke, fd.Unit, 
                fd.isSubsidyPending, pm.MCerttype AS pmcerttype,fd.MCerttype AS fdcerttype, fd.Remark, ISNULL(fd.IsSupEqu, 0) AS IsSupEqu, 
                ISNULL(fd.SupEquName, '') AS SupEquName, ISNULL(fd.SupEquGuoJBT, 0) AS SupEquGuoJBT, 
                ISNULL(fd.SupEquShengBT, 0) AS SupEquShengBT, ISNULL(fd.SupEquUnit, '') AS SupEquUnit,fd.IsShengAdmissibility as IsMachineTypeAdmissibility
FROM      TD_MACHINE_TYPE_PUSH AS dl INNER JOIN
                TD_MACHINE_TYPE_PUSH AS xl ON dl.Code = LEFT(xl.Code, 2) AND LEN(xl.Code) = 4 AND dl.AreaCode = xl.AreaCode AND 
                dl.Year = xl.Year AND dl.Batch = xl.Batch 
                INNER JOIN TD_MACHINE_TYPE_PUSH AS pm ON xl.Code = LEFT(pm.Code, 4) AND LEN(pm.Code) = 6 AND 
                xl.AreaCode = pm.AreaCode AND xl.Year = pm.Year AND xl.Batch = pm.Batch 
				LEFT OUTER JOIN
                TD_MACHINE_TYPE_PUSH AS fd ON pm.Code = LEFT(fd.Code, 6) AND LEN(fd.Code) = 8 AND pm.AreaCode = fd.AreaCode AND pm.Year = fd.Year AND pm.Batch = fd.Batch
WHERE isnull(fd.IsCollectInfo,0)=0');
执行成功, 执行耗时1秒 128毫秒. 执行号:2709
影响了18条记录

1条语句执行成功

再次执行语句结果

image.png

请教社区各位老师,这是怎么回事呢?是我哪里操作的少步骤吗?

回答 0
暂无回答
扫一扫
联系客服