Oracle数据库Customer表DDL调优请求:加速每日视图查询
优化Customer表DDL以加速视图查询的方案
1. 调整复合主键的列顺序
现有复合主键(Cust_ID, create_dt)的前置列是Cust_ID,对视图中基于create_dt的过滤逻辑毫无帮助。建议将主键列顺序改为(create_dt, Cust_ID),这样索引可以快速定位到最新的create_dt区间,同时Cust_ID作为唯一列也能保证主键的唯一性:
-- 删除原有主键约束 ALTER TABLE customer DROP CONSTRAINT PK_CUSTOMER; -- 创建新的复合主键 ALTER TABLE customer ADD CONSTRAINT PK_CUSTOMER PRIMARY KEY (create_dt, Cust_ID);
2. 新增trunc(create_dt)函数索引
视图频繁使用trunc(create_dt)作为过滤条件,直接基于该表达式创建索引,可避免数据库扫描数据后再计算截断值,快速定位符合条件的行:
CREATE INDEX IDX_CUSTOMER_TRUNC_CREATEDT ON customer (trunc(create_dt));
该索引能同时加速max(trunc(create_dt))的聚合查询与后续行过滤操作。
3. 按create_dt创建范围分区(千万级数据推荐)
针对每日取最新日期数据的场景,对表按create_dt做范围分区,查询时数据库会直接定位到最新分区,无需扫描历史数据:
-- 删除原有主键约束(根据实际情况调整) ALTER TABLE customer DROP CONSTRAINT PK_CUSTOMER; -- 创建按天自动分区的表 CREATE TABLE customer ( Cust_ID NUMBER, create_dt DATE, -- 其他60列的定义 ) PARTITION BY RANGE (create_dt) INTERVAL (NUMTODSINTERVAL(1, 'DAY')) ( PARTITION p_initial VALUES LESS THAN (TO_DATE('2020-01-01', 'YYYY-MM-DD')) ); -- 重新创建复合主键 ALTER TABLE customer ADD CONSTRAINT PK_CUSTOMER PRIMARY KEY (create_dt, Cust_ID);
分区后视图查询的性能会得到量级提升,尤其适合千万级数据规模。
内容的提问来源于stack exchange,提问作者user3699972
相关产品推荐
相关产品推荐

