#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 символов.