Я думаю, что проблема заключается в том, как хранятся ключевые слова.Если я правильно интерпретирую ваш код, столбец KEYWORD состоит из строки значений ключевых слов, разделенных пробелами, таких как
KEYWORD1 KEYWORD2 KEYWORD3
. Из-за этого вы вынуждены использовать LIKE для поискаи это, вероятно, причина медлительности.
Хотя я понимаю, что это может быть несколько болезненно, возможно, было бы лучше создать вторую таблицу, возможно, называемую KEYWORDS, которая будет содержать отдельные ключевые слова, которые относятся к данномузапись базовой таблицы (я буду называть базовую таблицу PPC, поскольку не знаю, как она на самом деле называется).Предполагая, что ваша текущая базовая таблица выглядит следующим образом:
CREATE TABLE PPC
(ID_PPC NUMBER PRIMARY KEY,
KEYWORD VARCHAR2(1000),
<other fields>...);
Что бы вы могли сделать, это перестроить таблицы следующим образом:
CREATE TABLE NEW_PPC
(ID_PPC NUMBER PRIMARY KEY,
<other fields>...);
CREATE TABLE NEW_PPC_KEYWORD
(ID_NEW_PPC NUMBER,
KEYWORD VARCHAR2(25), -- or whatever is appropriate for a single keyword
PRIMARY KEY (ID_NEW_PPC, KEYWORD));
CREATE INDEX NEW_PPC_KEYWORD_1
ON NEW_PPC_KEYWORD(KEYWORD);
Заполните таблицу NEW_PPC_KEYWORD, потянувотдельные ключевые слова из старого поля PPC.KEYWORD, поместив их в таблицу NEW_PPC_KEYWORD.Имея только одно ключевое слово в каждой записи в NEW_PPC_KEYWORD, вы теперь можете использовать простое объединение, чтобы извлечь все записи в NEW_PPC, которые имеют ключевое слово, выполнив что-то вроде
SELECT P.*
FROM NEW_PPC P
INNER JOIN NEW_PPC_KEYWORD K
ON (K.ID_NEW_PPC = P.ID_NEW_PPC)
WHERE K.KEYWORD = '<whatever>';
Поделиться и наслаждаться.