标记未使用的列
如果您担心从大表中的所有行中删除列数据所需的时间长度,您可以使用该ALTER TABLE...SET UNUSED
语句。
该语句将一个或多个列标记为未使用,但实际上并未删除目标列数据或恢复这些列占用的磁盘空间。但是,标记为未使用的列不会显示在查询或数据字典视图中,并且会删除其名称,以便新列可以重用该名称。在大多数情况下,列上定义的约束、索引和统计信息也会被删除。例外是标记为未使用的 LOB 列的任何内部索引都不会被删除。
要将hiredate
和mgr
列标记为未使用,请执行以下语句:
ALTER TABLE hr.admin_emp SET UNUSED (hiredate, mgr);
您可以稍后通过发出ALTER TABLE...DROP UNUSED COLUMNS
语句删除标记为未使用的列。每当显式删除表的任何特定列或列时,也会从目标表中删除未使用的列。
数据字典视图USER_UNUSED_COL_TABS
,ALL_UNUSED_COL_TABS
或DBA_UNUSED_COL_TABS
可用于列出所有包含未使用列的表。该COUNT
字段显示表中未使用的列数。
SELECT * FROM DBA_UNUSED_COL_TABS; OWNER TABLE_NAME COUNT --------------------------- --------------------------- ----- HR ADMIN_EMP 2
对于外部表,SET UNUSED语句被透明地转换为ALTER TABLE DROP COLUMN语句。因为外部表仅由数据库中的元数据组成,所以DROP COLUMN语句的执行与SET UNUSED语句的执行等效。
Removing Unused Columns
该ALTER TABLE...DROP UNUSED COLUMNS
语句是唯一允许对未使用的列执行的操作。它从表中物理删除未使用的列并回收磁盘空间。
在随后的ALTER TABLE
语句中,CHECKPOINT
指定了可选子句。此子句导致在处理指定的行数后应用检查点,在本例中为 250。检查点减少了删除列操作期间累积的撤消日志量,以避免潜在的撤消空间耗尽。
ALTER TABLE hr.admin_emp DROP UNUSED COLUMNS CHECKPOINT 250;
如果对表启用高级行压缩,则可以删除表列。如果仅启用基本表压缩,则不能删除列。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体