Как оптимизировать БД или запросы к большому количеству данных по нескольким полям?
Здравствуйте! Столкнулся со следующей проблемой. У меня есть БД в которой хранятся 4 сущности: Сделки, Контакты, Компании. Которые связаны между собой. У контактов может быть несколько сделок, у сделок несколько контактов и т.д.
Для того чтобы связать эти сущности использую еще одну таблицу (links). Помимо этого у каждой сущности есть свои поля и уникальный id.
У сделок: источник сделки, тэг, дата создания/изменения сделки и т.д. Эти поля не уникальны и могут повторятся. У контактов и компаний такая же ситуация с полями.
БД нужна для составления отчетов по сделкам, в отчет входят привязанные контакты/компании и соответственно значения их полей.
Если делать отчет по сделкам созданных с 01.01.2017 по 01.01.2018 (даты хранятся в timestamp), проблем особых нет. Но иногда приходится делать отчет по сделкам, контакты которых имеют значение поля город-Казань и возраст - >25лет. Вот тут то и возникает проблема с временем выполнения запроса.
Каждая из сущностей имеет не менее 10 полей по которым может производится выборка.
Грешным делом подумал о разделении одной таблицы на несколько таблиц по 100000 записей(contacts_1,contacts_2), но понял, что только усугублю этим ситуацию.
Нашел в сети партицирование таблиц, но понял что оно тоже мне не подходит. Подскажите пожалуйста, каким образом можно оптимизировать архитектуру БД или сами запросы.