小编pan*_*doh的帖子

Oracle 12 中不区分大小写的 CLOB 搜索

问题:在 CLOB 列中执行不区分大小写的搜索的最高效方法是什么?

我简化了查询以轻松重现问题。filedata 表可以有数百万行。许多行可以具有相同的文件 ID。fileid 列已编入索引。在特定文件 ID 匹配多行的情况下,过程非常慢。

select * from filedata where fileid=2148102100 AND REGEXP_LIKE (dataClobfield, 'Some Text Here', 'i');
Run Code Online (Sandbox Code Playgroud)

此查询在 130 秒内完成。此查询返回 16 行,但有 400k 行与 fileid 值匹配(换句话说,如果我删除了 regexp_like where 子句,我将得到 400k,fileid 为 2148102100)。

如果我将其更改为

select * from filedata where fileid=2148102100 AND dataClobfield like '%Some Text Here%';
Run Code Online (Sandbox Code Playgroud)

它在 32 秒内完成,但搜索区分大小写,不符合要求。

我也试过

select * from filedata where fileid=2148102100 AND LOWER(dataClobfield) like '%some text here%';
Run Code Online (Sandbox Code Playgroud)

这在 83 秒内返回......比 regexp_like 好,但仍然不是很好。

我读过的其他内容没有奏效:使用 DBMS_LOB.instr 函数(区分大小写)设置会话 NLS_SORT=BINARY_CI(不适用于 CLOB)。理想情况下,我希望将其缩短到 30 秒。有任何想法吗?

oracle oracle-12c

6
推荐指数
1
解决办法
1815
查看次数

标签 统计

oracle ×1

oracle-12c ×1