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

ФОН:

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

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?

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


person ProfileTwist    schedule 28.12.2012    source источник


Ответы (1)


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

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

person ethrbunny    schedule 28.12.2012
comment
Может ли оператор ON иметь несколько условий, таких как ON a.entity_id = b.entity_id AND a.entity_type = 1 ? - person ProfileTwist; 29.12.2012