Вы можете сделать «добавление изменений» в базу данных, чтобы создать общность между таблицами UNIONED. Это будет рефакторинг, который добавляет только таблицы & столбцы, сохраняя совместимость чтения с неизменным кодом приложения.
В этом примере вы должны создать общую таблицу «слева» от admin
и admin_custom
, которая затем будет соединена с ней. У этого будет ID фонда, ТИП (чтобы вы знали, к чему присоединяетесь) и, если возможно, другие полезные общие столбцы.
Вы также создать общую таблицу «слева» quant1
и quant1_cust
, которые затем будут присоединяться из , что.
Затем вы изменили запрос на использование ссылки на идентификатор фонда из общих таблиц, заменив свои позиции UNION либо просто «общей таблицей» (если возможно), либо "Common Table" left outer join Legacy1 left outer join Legacy2
.
Я не понимаю «что» эти таблицы на самом деле, поэтому я не могу помочь вам с разумным наименованием. (Именование - самая важная часть дизайна, и вы должны были объяснить это в своем вопросе.)
Но этот подход очень хорошо работал для крупного проекта правительства, который я возглавлял, где общие таблицы были ДОКУМЕНТОМ и DOC_ELEMENT. Деревоструктурированные документы с 8 различными типами документов и без ранее существовавшей общности.
В нашем случае ДОКУМЕНТ был добавлен «слева от» RFP, TENDER, PRICEPLAN и т. Д. И обеспечил общность.
Это не полная совместимость в обратном направлении - вам нужно будет изменить код INSERT приложения. И если вы переходите на рефакторинг, вы можете рассмотреть , помещая ту же структуру таблицы в ту же таблицу.
Лучше всего проверять возможные структуры, проверять возможную производительность и определять, какие изменения кода потребуются. Затем вы можете выбрать траекторию.
Вы уверены, что вы ** ДОЛЖНЫ ** использовать UNION? Могут ли быть дубликаты (поскольку разница между UNION и UNION ALL заключается в удалении дубликатов), если нет, вы можете использовать UNION ALL –
Индексирование - это почти наверняка ответ. Используйте 'EXPLAIN' в вашем запросе, чтобы узнать, что делает MySQL, а затем посмотрите на индексацию самых медленных частей. –
Нет необходимости в 'внешнем соединении', так как вы включаете этот результат в свои критерии' where' ... – user2480596