注册

分区表查询全表扫描的问题

DM_566579 2024/12/03 446 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦8
【操作系统】:centos7
【CPU】:x86_64
【问题描述】*:
建表语句:
CREATE TABLE "TEST_DAY"
(
"PARTITION_KEY" VARCHAR2(3),
"STAT_DATE" VARCHAR2(8))
PARTITION BY LIST("PARTITION_KEY")
(
PARTITION "P_DAY_001" VALUES('1') STORAGE(ON "TBS_BISHOW", CLUSTERBTR) ,
PARTITION "P_DAY_002" VALUES('2') STORAGE(ON "TBS_BISHOW", CLUSTERBTR) ,
PARTITION "P_DAY_003" VALUES('3') STORAGE(ON "TBS_BISHOW", CLUSTERBTR) ,
...
PARTITION "P_DAY_300" VALUES('400') STORAGE(ON "TBS_BISHOW", CLUSTERBTR) ,
) STORAGE(ON "TBS_BISHOW", CLUSTERBTR) ;

我们的应用场景是从oracle迁移到达梦,里面涉及到分区表的查询,oracle里通过where条件筛选分区字段,其中的分区字段是通过函数fun_get_partitionkey_300根据日期来生成的:
select * from TEST_DAY where PARTITION_KEY=fun_get_partitionkey_300('20241212')
这种情况,oracle可以走分区表,不进行全表扫描,
但是同样的sql,在达梦上执行是不走分区表的,从而使查询效率降低。
我理解的达梦里走分区表的sql是这样:
select * from TEST_DAY PARTITION(P_DAY_003);
或者
select * from TEST_DAY_P_DAY_003
其中PARTITION后面的括号里必须固定写死为某个固定分区,不能拼接或者写函数。
像我们这种应用场景用达梦数据库,
根据分区变量查分区表,
应该怎么解决全表扫描的问题呢

我们的版本信息如下,应该是24年的。
DM Database Server 64 V8;8.4;企业版
DB Version: 0x7000c
03134284172-20240321-222308-20093
请问这个优化是怎么优化呢,像我们的这种通过where条件过滤分区的查询跟直接走分区表的效率是相同的或者相差不大的吗?
select * from TEST_DAY where PARTITION_KEY=fun_get_partitionkey_300('20241212')

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