分区表不建议创建主键的原因

简介:

分区表尽量不要建主键,因为建主键的同时会建一个唯一性的全局索引,在drop分区表时如果不指定update global indexes则

会使索引失效,导致数据无法入库。
如果非要建主键,要2种方法:
1.应用上drop 分区表时显示指定update global indexes,
2.将主键上的索引建成本地索引
上述2种方法虽然可以实现,但效果都不好。因为当数据量超大时维护索引也是很大的开销。将主键建成本地索引的方法也比较受限。

将主键建成本地索引方法:
建一个包含(分区列、主键列)的唯一性复合索引,然后在这个索引上建主键
create  unique index  idx_ALARM_RESULT_ID on ALARM_RESULT (ALARM_RESULT_ID,TIME) local; #一定要包含分区列否则会报ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集
alter table ALARM_RESULT add primary key (ALARM_RESULT_ID,TIME);
测试分区表建主键导致数据无法入库过程:
create table ALARM_RESULT
(
  ALARM_RESULT_ID   VARCHAR2(50) not null,
  TIME NUMBER(20)
)tablespace test_DEFAULT
partition by range (TIME)
(
  partition W values less than (5)
    tablespace test_DEFAULT,
  partition P_OTHER values less than (MAXVALUE)
    tablespace test
);
alter table ALARM_RESULT  add primary key (ALARM_RESULT_ID)   using index   tablespace test_INDEX;

1.查看索引状态

SQL> select table_name,index_name,status from user_indexes;

TABLE_NAME                     INDEX_NAME                     STATUS
------------------------------ ------------------------------ --------
ALARM_RESULT                   SYS_C003358                    VALID

SQL>

2.查看各个分区的数据
SQL> select ALARM_RESULT_ID,time from ALARM_RESULT  PARTITION(w);

ALARM_RESULT_ID                                                     TIME
-------------------------------------------------- ---------------------
1                                                                      1

SQL> 
SQL> select ALARM_RESULT_ID,time from ALARM_RESULT  PARTITION(p_other);

ALARM_RESULT_ID                                                     TIME
-------------------------------------------------- ---------------------
2                                                                     10

SQL>


3.drop分区
SQL> ALTER TABLE ALARM_RESULT  DROP PARTITION  w;

Table altered

SQL>

4.查看索引状态
SQL> select table_name,index_name,status from user_indexes;

TABLE_NAME                     INDEX_NAME                     STATUS
------------------------------ ------------------------------ --------
ALARM_RESULT                   SYS_C003358                    UNUSABLE

SQL>

5.向表中插入数据时报错
SQL> insert into ALARM_RESULT(ALARM_RESULT_ID,time)values(3,15);

insert into ALARM_RESULT(ALARM_RESULT_ID,time)values(3,15)

ORA-01502: 索引'owner.SYS_C003358'或这类索引的分区处于不可用状态

SQL>


6.此时如果重建一下索引,索引状态会恢复为可用状态,数据也可插入。
SQL> alter index SYS_C003358 rebuild;

Index altered

SQL> select table_name,index_name,status from user_indexes;

TABLE_NAME                     INDEX_NAME                     STATUS
------------------------------ ------------------------------ --------
ALARM_RESULT                   SYS_C003358                    VALID

SQL> insert into ALARM_RESULT(ALARM_RESULT_ID,time)values(3,15);

1 row inserted

SQL> commit;

Commit complete

SQL>


特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt161
相关文章
|
8月前
|
弹性计算 网络协议 数据挖掘
阿里云服务器ECS使用抓包工具进行网络数据包抓取(图文教程)
本文介绍2026年阿里云ECS服务器使用抓包工具排查网络异常的方法,涵盖Linux下tcpdump和Windows下Wireshark的安装、配置与抓包操作步骤,并提供具体命令示例及数据分析流程,助力高效定位丢包、延迟等问题。
|
8月前
|
XML JSON API
1688商品详情API接口使用指南
1688商品详情API(1688.item_get)是阿里1688开放平台核心接口,支持通过商品ID获取50+字段的全量信息,涵盖标题、价格、SKU、库存、图文、批发规则及商家资质等,适用于ERP同步、比价、跨境铺货等B2B场景。需实名认证并创建应用获取app_key与app_secret,接口仅返回JSON格式数据,是对接1688生态的关键技术通道。(239字)
1305 4
|
11月前
|
敏捷开发 人工智能 自然语言处理
87_文化适配:多语言提示设计 - 分析本地化提示的适配性
在全球化日益深入的今天,大型语言模型(LLM)的多语言能力已成为其核心竞争力之一。随着企业和开发者将AI应用推广到不同语言区域,如何设计适配各文化背景的提示词,确保模型输出既准确又符合目标语言使用者的文化习惯,已成为提示工程领域的重要挑战。文化适配的多语言提示设计不仅涉及简单的语言翻译,更需要深入理解目标文化的思维模式、表达习惯、价值观和禁忌,通过精心设计的提示策略,引导LLM生成真正贴合当地文化语境的内容。
507 0
|
8月前
|
供应链 安全 算法
什么是数据要素?一文带你认识数据要素全流程
数据正从成本负担转向核心生产要素。本文结合实例,解析“数据要素化”全过程:从内部治理、产品封装到流通交易,揭示企业如何将沉睡数据变为可创造新价值的资产,并提供落地路径与关键技术支撑。
快手直播录制工具, 直播录制工具,支持抖音快手小红书
声明:所下载的文件以及如下所示代码仅供学习参考用途,作者并不提供软件的相关服务。
|
Linux 开发工具
Linux——手把手教你解决sudo指令无法使用的问题
Linux——手把手教你解决sudo指令无法使用的问题
2072 1
|
前端开发 JavaScript NoSQL
6款 Retool 最佳替代方案
本篇文章的目的通过低代码平台使用者的视角引出细节,了解他们为什么使用低代码平台以及会选择哪个低代码平台来加速内部系统的开发。
1387 0
6款 Retool 最佳替代方案
|
应用服务中间件 数据安全/隐私保护
session 生命周期和经典案例-防止非法进入管理页面
session 生命周期和经典案例-防止非法进入管理页面
494 0
|
存储 人工智能 编译器
数据在内存中的存储与各类型混合运算(上)
数据在内存中的存储与各类型混合运算
299 0
|
前端开发 Android开发
一文解决RN0.58部分安卓手机text显示不全问题
一文解决RN0.58部分安卓手机text显示不全问题
1238 0
一文解决RN0.58部分安卓手机text显示不全问题