我的任务是修复 Oracle 中的错误数据问题。有完全空的行(百万),没有PK,没有indeces,并且该表经常使用。这导致消费应用程序大幅减速。我的想法是,由于表也需要备份,因此使用此处描述的功能:在 oracle 中创建现有表的完整副本。这将为我提供一个新的表来创建 PK 和 indeces,并确保所有触发器和此类结转。然后我可以使用重命名来交换哪个表是“备份”与生产中的表。
我的想法是在创建新表时劫持
WHERE
子句,并将“WHERE 1 = 0”替换为过滤完全空行的值。然而,完全为空是指每个值都是空的。
CREATE TABLE 'TABLE' AS SELECT * FROM OLD_TABLE WHERE......
有没有比用
SELECT
一遍又一遍地将每一列与相同的 AND
子查询进行比较更快的方法?大约有 60 列。
...WHERE col1 NOT IN (long subquery)
AND col2 NOT IN (identical long subquery)
AND col3 not in....
这可能就是您正在寻找的:
CREATE TABLE new_table AS
SELECT *
FROM old_table
WHERE col1 IS NOT NULL
OR col2 IS NOT NULL
etc