Что будет быстрее при извлечении данных из базы данных MySQL? - PullRequest
3 голосов
/ 11 ноября 2010

Что будет быстрее при извлечении данных из базы данных MySQL?Данные разделены на два столбца или данные одного размера из одного столбца?

Редактировать:

Просто, чтобы дать идею, у меня есть таблица для вопроса и пять ответов, которые она получит.Эти ответы довольно большие, около 1500 слов каждый.Что касается скорости извлечения данных, должен ли я использовать столбец для каждого ответа, или я должен просто сделать один столбец с 5 ответами, разделенными разделителем, а затем использовать скрипт для их разделения?

Ответы [ 6 ]

4 голосов
/ 11 ноября 2010

В ответ на ваши изменения ни один из представленных вариантов не является «правильным» дизайном для этой проблемы. Вы должны сделать 5 строк в таблице ответов, каждая с идентификатором вопроса и одним ответом в одном столбце.

Только в случае проблем с производительностью следует рассмотреть другие варианты. Маловероятно, что у вас возникнут проблемы, если вы не соберете миллионы вопросов.

4 голосов
/ 11 ноября 2010

Не объединяйте ответы в один столбец, разделенный или нет.Если вы делаете это, вы не только нарушаете эмпирическое правило в дизайне БД ( первая нормальная форма ), но и настраиваете себя на мир программированиядорога.

Вы также должны учитывать, что вы принимаете участие в преждевременной оптимизации здесь.И не делай этого.По моему опыту, и я думаю, что другие согласятся, вы должны доверять вашей СУБД , чтобы эффективно хранить и извлекать данные для вас.Единственное, что вам нужно сделать, это правильно настроить ваши индексы.Если в будущем это повлечет за собой проблемы с производительностью, вы можете денормализовать этот момент.

2 голосов
/ 11 ноября 2010

Я бы сказал, что то, как вы собираетесь получать и использовать информацию, более важно, чем то, как она на самом деле хранится.

Я бы сказал, что если вы собираетесь ссылаться на каждый ответ независимо,в качестве ответов с несколькими вариантами ответов, сохраняя ответы в таблице из 3 столбцов со следующей структурой:

CREATE TABLE answers (
  question_id INTEGER PRIMARY KEY,
  answer INTEGER,
  answer_text TEXT
);

, где ответом будет что-то вроде 1, 2, 3, 4, .. для каждого из ответов вданный вопрос, будет более подходящим и вменяемым.

2 голосов
/ 11 ноября 2010

Не полагайтесь на догадки и предположения.Оцените его сами, на своем оборудовании, с помощью своего кодирования и своих данных.

2 голосов
/ 11 ноября 2010

Если они находятся в одной таблице, это не будет иметь значения.

После обращения к строке поиск данных из столбцов занимает тривиальное время.

Выдолжен принять решение на основе ваших данных и того, как вы будете получать к ним доступ.

0 голосов
/ 11 ноября 2010

Некоторые БД не индексируют столбцы текстового типа.Таким образом, если вы разбиваете столбцы из текстового столбца на varchar, и у вас есть каждый индексированный столбец, и вы используете БД, которая не индексирует текстовые столбцы, выполучит лучшую производительность, разбив их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...