Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Mysql Innodb: объединение 3 таблиц в одну для быстрого поиска условных соединений

Автор вопроса: ProfileTwistОтветов: 1

ФОН:

Я разрабатываю функцию поиска, которая позволяет пользователям искать сразу три объекта: классы, студенческие организации и события по имени.

MySQL 5.6 и Innodb будут использоваться на относительно небольшом сервере.

ТАБЛИЦЫ:

Поиск

entity_id  (tiny_int)
entity_type  (tiny_int)
full_name   (varchar(255))

Index (Primary) -> entity_id, entity_type
Index (FULL TEXT INDEX) -> full_name

Класс (entity_type = 1)

class_id
ALL OTHER COLUMNS...

События (entity_type = 2)

event_id
ALL OTHER COLUMNS

Организации (entity_type = 3)

org_id
ALL OTHER COLUMNS

ВОПРОС:

Уместно ли индексировать имя 3, казалось бы, похожих, но разных наборов данных (класс, событие, организация) в одну таблицу поиска с помощью entity_id, entity_type первичного ключа?

Как мне выполнить соединение таблицы поиска с таблицами Class, Events, Orgs? Есть ли условное выражение, которое я могу сделать, используя entity_type?

Любая помощь или руководство приветствуется.

full-text-searchinnodbcomposite-key

Ответы

Ответ 1 · рейтинг 1 · ethrbunny

Это кажется разумным подходом к связыванию этих трех типов таблиц. Это похоже на то, что вы часто видите, когда люди делают с "account_type: user, admin, other" и ссылками на отдельные настройки для каждого.

Выполнение соединения между основной таблицей и всеми тремя подчиненными будет зависеть от того, насколько похожи столбцы. Если они v похожи, вы можете сделать три объединения в одном запросе и поместить entity_type как часть предложения on. Если они v разные, вам может быть лучше, разделив запрос на 3 отдельных соединения. Вы можете объединить их вместе, но это может стоить или не стоит.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы