ИНФОРМАЦИЯ
В настоящее время у меня есть две таблицы, с которыми я работаю - таблица POST, которая содержит данные для отдельных сообщений, и таблица ИЗБРАННОЕ, которая содержит данные для пользователей, которые решили сохранить избранные сообщения в своем профиле.
Таблицы выглядят так:
В таблице POSTS для идентификатора есть только первичный ключ, а индексы, которые я установил, отсутствуют. В Избранное у меня есть комбинированный индекс, который я тестировал (postid, deviceid).
Таблица POSTS содержит ок. 10000 записей.
Таблица ИЗБРАННОЕ содержит ок. 4 680 500 записей.
Запрос, который я использую, чтобы получить избранное из определенного deviceid:
SELECT post FROM POSTS
WHERE id IN
(SELECT postid FROM favourites WHERE deviceid="12d4a4a4a4a4a4a");
ПРОБЛЕМА:
При количестве возвращаемых данных и нескольких устройствах, имеющих несколько избранных, запрос может занять до 7-10 секунд на оба сообщения COUNT для определенного устройства и / или SELECT с использованием вышеуказанного запроса и подзапроса. Когда это происходит в часы пик, вы, очевидно, можете представить себе проблемы, которые могут вызвать.
Кэширование результатов запроса - вариант, но поскольку данные довольно специфичны, так как один и тот же пользователь не вызывает запрос несколько раз, а скорее уникальные экземпляры, я думаю, что есть лучшее решение. С другой стороны, кэширование должно быть недолгим, что сведет на нет его преимущества.
Мне известен метод индексации, и я знаком с внешними ключами, но я не уверен практически, если и как они могут быть реализованы между запросом и подзапросом для повышения производительности.
Любой совет / руководство очень ценится.
Приветствия
Джаред