sql - CLOB 列之间的减法运算
问题描述
Create Table t1 (
table_id number,
dose_detail clob,
CONSTRAINT t1_pk PRIMARY KEY (table_id)
);
Create Table t2 (
table_id number,
dose_detail clob,
CONSTRAINT t2_pk PRIMARY KEY (table_id)
);
这个 clob 列包含 1400 万个数据,我需要在这两个表之间执行 MINUS 操作。
我用于减法运算的这种方法:
SELECT table_id,
DBMS_OBFUSCATION_TOOLKIT.MD5(input=> UTL_RAW.CAST_TO_RAW(dose_detail))
FROM t1
MINUS
SELECT table_id,
DBMS_OBFUSCATION_TOOLKIT.MD5(input =>UTL_RAW.CAST_TO_RAW(dose_detail))
FROM t2;
这种方法需要更长的执行时间,比如 1 小时,但我想减少 5-10 分钟的执行时间。
DBMS_LOB.compare
不适合我的场景。
如果可能,请提供其他选项。
解决方案
您可以使用以下语句:
SELECT table_id, DBMS_OBFUSCATION_TOOLKIT.MD5(input=> UTL_RAW.CAST_TO_RAW(dose_detail)) FROM t1 WHERE table_id IN (
SELECT table_id FROM (
SELECT table_id, DBMS_CRYPTO.HASH(dose_detail,2)
FROM t1
MINUS
SELECT table_id, DBMS_CRYPTO.HASH(dose_detail,2)
FROM t2));
因为 DBMS_CRYPTO 支持 CLOBS,而 DBMS_OBFUSCATION_TOOLKIT 不支持,但改进取决于内部 MINUS 语句返回的数据量和其他因素。如果创建物化视图,以下语句更好:
CREATE MATERIALIZED VIEW mv_t
BUILD IMMEDIATE
REFRESH FAST
ON COMMIT
AS
SELECT table_id FROM (
SELECT table_id, DBMS_CRYPTO.HASH(dose_detail,2)
FROM t1
MINUS
SELECT table_id, DBMS_CRYPTO.HASH(dose_detail,2)
FROM t2);
这样您就可以使用以下语句访问您的数据:
SELECT table_id,
DBMS_OBFUSCATION_TOOLKIT.MD5(input=> UTL_RAW.CAST_TO_RAW(dose_detail))
FROM t1
推荐阅读
- sql - 我可以使用 OUTPUT INTO 将数据添加到具有附加值的关系表吗?
- javascript - 如何使用 vue 检查击键模糊?
- r - dbinom() 和 rbinom() 不应该在 R 中匹配吗?
- image - Excel 2016 vba 将图片插入并调整大小到范围
- objective-c - 使用参数从 Objective-C 调用 Swift 函数
- cmd - 如何在 Windows 中运行`ng`
- java - Java关于对象数组
- c - strcpy 在我的代码中出现分段错误
- android - Admob 错误:无法加载广告
- python - 根据输入词 NLP 提取相关句子