Как спроектировать базу данных для многопользовательских флэш-карт?

#mysql #database

#mysql #База данных

Вопрос:

некоторое время назад я создал для собственного использования систему флэш-карт; Моему другу она понравилась, поэтому я хочу сделать ее общедоступной (онлайн).

Моя версия — это быстрый и уродливый взлом, для которого не требуется база данных, но база данных необходима для веб-версии. Мне интересно, как я мог бы это спроектировать.

таблица элементов: идентификатор элемента, вопрос, ответ, другое

элемент «таблица отслеживания»: идентификатор, идентификатор пользователя, идентификатор элемента, неправильное время, последнее пройденное, следующее повторение, забытый индекс, другое

Таким образом, с 1000 элементами и 5000 пользователями, это составит 5 миллионов записей.

Я думаю, что если я получу данные с помощью

 SELECT * FROM trackingtable WHERE `user-id` = 1 AND `item-id` = 1
  

это будет очень медленно, верно?

Это правильный подход?

Комментарии:

1. Неправильно. Если у вас есть составной индекс, который охватывает user-id item-id столбцы, то этот запрос будет достаточно быстрым.

2. Но для каждого user-id item-id будет уникальный результат

3. Ах, я неправильно понял, что вы имеете в виду

Ответ №1:

Создайте индекс из столбцов user-id и item-id. Это будет невероятно быстро, даже для довольно больших таблиц. Сравнение целых чисел по индексированным столбцам — дешевая и быстрая операция, особенно если индекс умещается в памяти.

Комментарии:

1. Да, сравнение строк происходит медленнее, в основном потому, что строки больше. Предпочтителен небольшой индекс, поскольку его легче уместить в памяти. Строковые обозначения в MySQL, однако, можно уменьшить в размере, не используя все поле для индексации. Используйте только первые 4 или 5 символов.