Как оптимизировать БД или запросы к большому количеству данных по нескольким полям?

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


Сделайте однозначную иерархию.

Чтобы ускорить выборку, нужен индекс (можно "самодельный"). Для этого данные должны быть достаточно денормализованы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы