Предложения по производительности для определения таблицы MySQL
Я обеспокоен производительностью таблицы базы данных, в которой я должен хранить данные, связанные с приложением для опроса клиентов.
У меня есть таблица базы данных, в которой хранятся ответы клиентов из опроса. Поскольку вопросы опроса меняются в зависимости от клиента, я вместо определения схемы таблицы, используя каждый вопрос, в качестве столбца, чтобы определить его следующим образом
customerdata(customerid varchar,
partkey varchar,
questionkey varchar,
value, varchar,
version, int,
lastupdate, timestamp)
Куда:
partkey: это короткий код детали (part1,part2...)
вопросник: это короткий код вопроса, например, возраст, пол и т. д.
так как некоторые клиенты заполняют опрос дважды, трижды и т. д. я добавил колонку версий.
С помощью этого обычного дизайна partkey,questionkey и version являются первичными ключами.
Я обеспокоен производительностью с таким дизайном. Должен ли я определить другие первичные ключи как индексы? Это поможет? Пока на 30 клиентов у меня 7000 записей. Я ожидаю иметь максимум 300-500. Как вы думаете?
2 ответа
Похоже, довольно маленькая база данных. Я сомневаюсь, что у вас будут проблемы с производительностью, но если вы обнаружите их при запросе partkey
, questionkey
, или же version
позже вы всегда можете добавить один или несколько индексов для решения проблемы в то время. Нет необходимости решать проблему производительности, которой у вас нет и, вероятно, никогда не будет.
Проблемы с производительностью возникнут только в том случае, если вам придется выполнять чувствительные ко времени запросы, которые не используют customerid
поле в качестве основного фильтра. Я подозреваю, что у вас будут некоторые подобные запросы (когда вы хотите объединить данные по клиентам), но я сомневаюсь, что они будут достаточно чувствительными ко времени, чтобы на них влияло время отклика в одну секунду или меньше, которое я ожидал увидеть от такого небольшой сбор данных. Если они есть, добавьте индекс (ы) тогда.
Также обратите внимание, что таблица имеет только один ПЕРВИЧНЫЙ КЛЮЧ. Этот ключ может использовать более одного столбца, так что вы можете сказать, что столбцы customerid
, partkey
, questionkey
, а также version
являются частью первичного ключа, но вы не можете сказать их все "первичные ключи".
Что касается моего имени, у меня есть опыт работы с базой данных mysql, содержащей более 100 000 строк, и она работает нормально, так что все будет в порядке.
хотя, если вы выполняете сложные запросы, это другой случай, который больше зависит от дизайна базы данных, а не от числа строк.