Я занимаюсь разработкой программы слежения за студентами, в которой мне нужно хранить 15 экзаменационных оценок.
Я могу хранить метки в виде строки и разделять их, когда мне это нужно, для таких целей, как выполнение арифметических операций. Тем не менее, мне нужно как можно больше производительности.
Что лучше? Одно строковое поле или 15 отдельных полей int?
Ответы:
Если вы уже говорите о разбиении и вычислении, не храните это как массив.
Независимо от теории отношений и традиционных правил нормализации и догм, это просто дизайн, который дает вам МИНИМАЛЬНУЮ гибкость.
Сделайте каждый результат экзамена подряд.
Я не пытаюсь предвидеть все, но есть очень большое количество вещей, которые облегчает этот более гранулированный (и, да, нормализованный) и только немного более дорогостоящий дизайн, который вам может понадобиться, а может и не понадобиться сейчас, а может и может не понадобиться в будущем:
Выбрасывая самый высокий и самый низкий результат? Вам придется разрезать массив и отсортировать его.
Усреднение? Вам придется нарезать его и подвести итог
Анализ результатов экзамена по экзамену среди студентов? Вам придется нарезать и поворачивать
Сортировка для подсчета (или, например, британские GCSE, где это может быть 7 As и 2B)? Вам придется нарезать и сортировать
Обратите внимание, что все эти нарезки и сортировки очень дешевы в индексированном, нормализованном дизайне.
источник
Что касается результатов, то с точки зрения производительности явный победитель хранит их в числовом виде примерно так;
Его легко запрашивать, легко обновлять и добавлять, и супер легко и быстро выполнять агрегаты. Учитывая выбор «хранить эту информацию как строку, которую я должен разделить» или «хранить в столбце» ... победителем почти всегда будет «хранить в столбце» для большинства случаев использования в СУБД.
источник
до тех пор, пока вы используете tiny int (от 0 до 255) с использованием char (15) или 15 tinyint одинаково (по размеру). Итак, с точки зрения производительности, перейдите на 15 крошечных, поскольку вы экономите на извлечении и обработке строк.
ОБНОВИТЬ
если метки являются двузначными, вам понадобится CHAR (30), и это будет в два раза больше, чем в 15 раз.
источник