为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】: 银河麒麟 linux
【CPU】: 海光x86
【问题描述】*:
先开启 会话监控,SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);
表上有联合主键
CONSTRAINT "PK_AS_WORK_CENTER_CALENDAR" NOT CLUSTER PRIMARY KEY("COMPANY_CODE", "WORK_CENTER_CODE", "AD_DATE"),
表数据量140w+
字段定义:
"COMPANY_CODE" NVARCHAR(50) NOT NULL,
"WORK_CENTER_CODE" NVARCHAR(50) NOT NULL,
"AD_DATE" DATE NOT NULL,
查询条件
WHERE (company_code = '01'
AND work_center_code = 'SQ6SBX'
AND ad_date = '2026-03-17');
查询条件
WHERE company_code = N'01'
AND work_center_code = N'SQ6SBX'
AND ad_date = DATE '2026-03-17';
都是显示sscn;
然后试了几张别的表,根据唯一索引查询,同理都显示是 sscn;我本地windows 安装的v8 同样的数据表+数据量显示就是ssek2;
本地执行信息
我的本地版本:
本地schema是使用迁移工具从测试完整的迁移了一份数据,表结构+数据量数据分布都是一样的;
补充:
目前发现本地的页大小8k, 测试 页大小 32k,不知有影响没
求解哪里配置出了问题?
可以尝试更新一下目标表的统计信息:
DBMS_STATS.GATHER_TABLE_STATS('模式名','表名',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO',1);
明确几个维度:
1、数据量、数据过滤性是否一致;
2、表索引的统计信息是否收集。
建议先把表的统计信息收集一遍再看看看,在管理工具,表上右击收集统计信息即可。
其次关注下三个字段的过滤性情况,原则过滤性好的字段且等值的靠前。
1.收集统计信息后查看每个列的数据分布情况
select c.name,
b.name,
b.type$,
a.t_total,
a.n_sample,
a.n_distinct,
a.n_null,
a.LAST_GATHERED
from SYS.SYSSTATS a,
SYS.SYSCOLUMNS b,
sysobjects c
where c.id=a.id
and a.id=b.id
and a.colid=b.colid
and c.name='替换为具体表名';
2.获取ssek计划对应的trace计划
sf_set_session_para_value('monitor_sql_exec',1);
set autotrace trace;
select from xxx;
3.获取SSCN计划对应的trace计划
sf_set_session_para_value('monitor_sql_exec',1);
set autotrace trace;
select from xxx;
加个hint试下看看/*+ PLAN_NO_CACHE ADAPTIVE_NPLN_FLAG(0) */
AD_DATE 字段是字符类型还是日期类型的?最好能把执行计划贴一下
发一下explain SQL的计划看看
SPACE_COMPARE_MODE这个参数是不是1,是的话改成0。

你本地windows数据库与你服务器版本一致吗