注册

[求助]SQL在oracle执行的很快 在达梦就查不出来,请高手指教一下

欢乐马 2026/08/24 507 8

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:LINUX
【CPU】:海光
【问题描述】*:SQL在oracle执行的很快,在达梦就查不出来

我们的UPLOAD_NATION_LOG表建表语句(数据量8亿条)

CREATE TABLE "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"
(
"SBSFSBM" VARCHAR2(20) NOT NULL,
"GCSJ" VARCHAR2(20) NOT NULL,
"CDH" NUMBER(2,0) NOT NULL,
"SAVE_TIME" TIMESTAMP(0),
"UPDATE_TIME" TIMESTAMP(0),
"STATUS" CHAR(1),
"SERVER_URL" VARCHAR2(200) NOT NULL,
"DATA_TYPE" CHAR(1) DEFAULT '2' NOT NULL,
CONSTRAINT "SYS_C00146167" NOT CLUSTER PRIMARY KEY("SERVER_URL", "SBSFSBM", "GCSJ", "CDH")) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."UNL_SAVETIME_STATUS_IDX_copy1" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("STATUS" ASC,"SAVE_TIME" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."UNL_SAVE_TIME_IDX_copy1" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("SAVE_TIME" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."UNL_UPDATE_TIME_IDX_copy1" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("UPDATE_TIME" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."IDX_URL_STATUS_SAVETIME" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("SERVER_URL" ASC,"STATUS" ASC,"SAVE_TIME" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."IDX_GCSJ_ETC" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("GCSJ" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
CREATE OR REPLACE INDEX "ETCDATATRANSFORM"."IDX_UNL_REUPLOAD_TASK" ON "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"("STATUS" ASC,"SAVE_TIME" DESC,"SERVER_URL" ASC) STORAGE(ON "etcdatatransform", CLUSTERBTR);
COMMENT ON TABLE "ETCDATATRANSFORM"."UPLOAD_NATION_LOG" IS '上传部中心日志';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."SBSFSBM" IS '设备身份识别码';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."GCSJ" IS '观测时间';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."CDH" IS '车道号';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."SAVE_TIME" IS '保存时间';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."STATUS" IS '上传状态(0:未发送,1:已发送)';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."SERVER_URL" IS '服务接口路径';
COMMENT ON COLUMN "ETCDATATRANSFORM"."UPLOAD_NATION_LOG"."DATA_TYPE" IS '数据类型:1即时数据,2正常数据';

我们的DCSJ_RECIVE_SERVER_ADDRESS表建表语句(数据量50条)

CREATE TABLE "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"
(
"SERVER_URL" VARCHAR2(300) NOT NULL,
"LICENSE" VARCHAR2(200),
"RECIVE_VC_ID" VARCHAR2(400),
"DESCRIPTION" VARCHAR2(200),
"ENABLE" CHAR(1),
"DATA_TYPE" CHAR(1) DEFAULT '2' NOT NULL,
"INCLUDE_FEE_FIELD" CHAR(1) DEFAULT '0' NOT NULL,
"NATIONAL_ADDRESS" CHAR(1) DEFAULT '0' NOT NULL,
CONSTRAINT "PK_SERVER_URL" NOT CLUSTER PRIMARY KEY("SERVER_URL")) STORAGE(ON "etcdatatransform", CLUSTERBTR);
COMMENT ON TABLE "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS" IS '调查数据接收服务配置';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."SERVER_URL" IS '服务接口路径';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."LICENSE" IS '许可证书';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."RECIVE_VC_ID" IS '接收哪些路段数据(不配置默认为全部)';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."DESCRIPTION" IS '描述';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."ENABLE" IS '是否启用(1:启用,0:未启用)';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."DATA_TYPE" IS '数据类型:1即时数据,2正常数据';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."INCLUDE_FEE_FIELD" IS '是否包含交易金额字段:0不包含,1包含';
COMMENT ON COLUMN "ETCDATATRANSFORM"."DCSJ_RECIVE_SERVER_ADDRESS"."NATIONAL_ADDRESS" IS '是否部中心地址:0否,1是';

====================================================================================================================

我们的业务SQL:
select * from (select p.*, rownum r from UPLOAD_NATION_LOG p, DCSJ_RECIVE_SERVER_ADDRESS d where p.server_url = d.server_url and d.enable = '1' and d.NATIONAL_ADDRESS = '0' and status ='0' and save_time<=to_date('2026-08-24 09:30:00', 'yyyy-mm-dd hh24:mi:ss') ORDER BY p.save_time DESC) where rownum<=500;

====================================================================================================================

解释SQL
1 NSET2:[1, 1, 440]
2 PRJT2:[1, 1, 440];exp_num(9), is_atom(FALSE)
3 PRJT2:[1, 1, 440];exp_num(9), is_atom(FALSE)
4 SORT3:[1, 1, 440];key_num(1), partition_key_num(0), is_distinct(FALSE), top_flag(1), is_adaptive(0)
5 RN:[1, 1, 440]
6 SLCT2:[1, 1, 440];(P.STATUS = '0' AND P.SAVE_TIME <= var2)
7 HASH2 INNER JOIN:[1, 1, 440];LKEY_UNIQUE KEY_NUM(1); KEY(D.SERVER_URL=P.SERVER_URL) KEY_NULL_EQU(0)
8 NEST LOOP INDEX JOIN2:[1, 1, 440]
9 ACTRL:[1, 1, 440]
10 SLCT2:[1, 1, 144];(D.ENABLE = '1' AND D.NATIONAL_ADDRESS = '0')
11 CSCN2:[1, 50, 144];INDEX33555811(DCSJ_RECIVE_SERVER_ADDRESS as D); btr_scan(1)
12 BLKUP2:[1, 1, 109];IDX_URL_STATUS_SAVETIME(P)
13 SSEK2:[1, 1, 109];scan_type(ASC), IDX_URL_STATUS_SAVETIME(UPLOAD_NATION_LOG as P), scan_range((D.SERVER_URL,'0',null2),(D.SERVER_URL,'0',exp11)], is_global(0)
14 CSCN2:[137645, 831432546, 296];INDEX33555899(UPLOAD_NATION_LOG as P); btr_scan(1)

这个SQL在达梦2个小时都执行不出来是什么问题?

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