Секционирование таблицы SQL - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть таблица с 2+ миллионами строк. в моем сценарии запросы должны быть выполнены менее чем за 0,0001 секунды. но теперь большое количество строк увеличило его до 0,1 секунды. моя структура таблицы выглядит так:

chat_id | user_id | score

в каждом запросе я просто хочу получить оценку пользователя в чате, и я использую LIMIT 1 в запросе. для пользователей в начале таблицы запрос выполняется за 0,0001 секунды, но для пользователей в конце таблицы иногда требуется около 0,5 секунды, чтобы вернуть результат. Я думал о разделении таблицы на несколько таблиц с помощью chat_ids. например:

chat1_table

user_id | score

chat2_table

user_id | score

это приводит к тому, что строк в каждой таблице будет намного меньше (например, 1k строк в таблице), и скорость запроса будет увеличиваться, как я хочу. но мне интересно, разве я не могу получить такую ​​же производительность в одной таблице? Я слышал о разметке, но я мало что знаю об этом, плюс у меня только один диск.

1 Ответ

0 голосов
/ 28 апреля 2018

Я думаю, достаточно добавить индекс со столбцами chat_id и user_id. Фактически вы можете превратить их в составной первичный ключ, если пара (char_id, user_id) всегда уникальна. Если у вашей таблицы еще нет первичного ключа, вы можете добавить его:

ALTER TABLE tablename ADD PRIMARY KEY(char_id, user_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...