Как создать индекс для таблицы с 30 столбцами, в которой оператор Select генерируется динамически - PullRequest
1 голос
/ 11 февраля 2011

У меня есть таблица, содержащая языковые переводы. Имеет 30 столбцов для 30 языков.

Мое требование - искать во всех столбцах определенное слово (скажем "привет").

Я динамически создаю оператор Select:

Выбрать * из языков где {английский = "привет" ИЛИ французский = "привет" ИЛИ немецкий = "привет"}

Оператор внутри {} генерируется динамически.

Если мне нужно проиндексировать такую ​​таблицу, как мне это сделать?

Должен ли я создать один индекс для всех 30 столбцов или создать отдельные 30 индексов для каждого столбца?

Пожалуйста, предложите лучший вариант.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2011

У вас не должно быть 30 столбцов, вы должны использовать таблицу со столбцом для названия языка, столбец для слова и идентификатор, чтобы связать 30 строк вместе. Тогда вы можете просто запросить WORD = 'hello'.

Если вам абсолютно необходимо сохранить 30 столбцов, вам нужно будет создать 30 индексов, и производительность запроса будет в 30 раз ниже, чем нужно.

0 голосов
/ 11 февраля 2011

Если у вас есть все 30 столбцов, вам нужно будет отдельно индексировать каждый столбец.

0 голосов
/ 11 февраля 2011

Я бы создал вторую таблицу, содержащую [id, lang, value], и ​​проиндексировал бы ее по id и значению.Из этого или наоборот можно настроить представление, которое будет реплицировать таблицу, с которой вы работаете, и индексировать представление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...