你好,
我的資料庫是Oracle11g。出于某種原因,我需要在 column1 中存盤一個或多個值。在這種情況下,我使用 '||' 作為分隔符。所以 sql 查詢試圖回答,例如 column1 中的值是否為 310-G01-000-000-000?
我想要一個針對 Oracle 11g 的解決方案來提高查詢性能?我知道 PostgreSQL 列可以存盤一個陣列,并且陣列有索引。但對于甲骨文,我不知道。
我的一個想法是使用 REGEXP_SUBSTR 生成串列,并在 REGEXP_SUBSTR 上使用函式索引可能有效嗎?
請讓我知道將多個值存盤到一列的最佳做法以及快速查詢的方法?
非常感謝J
uj5u.com熱心網友回復:
如果您想要性能,則不要將分隔值存盤在列中。
如果無法避免,則只需使用簡單的字串函式(比正則運算式快一個數量級)來檢查是否存在子字串匹配:
SELECT *
FROM test_table
WHERE '||' || column1 || '||' LIKE '%||' || :search_value || '||%';
或者:
SELECT *
FROM test_table
WHERE INSTR('||' || column1 || '||', '||' || :search_value || '||') > 0;
然而
您可以使用嵌套表:
CREATE TYPE string_list IS TABLE OF VARCHAR2(19);
CREATE TABLE test_table (
id VARCHAR2(10),
column1 string_list
) NESTED TABLE column1 STORE AS test_table__column1;
然后:
INSERT INTO test_table (
id,
column1
) VALUES (
'abc',
string_list('310-G01-000-000-000', '310-G04-000-000-000','310-G04-000-000-001')
);
并使用MEMBER OF
集合運算子查找值:
SELECT id
FROM test_table
WHERE '310-G01-000-000-000' MEMBER OF column1;
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497588.html
標籤:数组 甲骨文 表现 oracle11g 正则表达式-substr