Что быстрее? "взорваться" или другой столбец? - PullRequest
2 голосов
/ 19 марта 2011

У меня есть ситуация, когда мне нужно хранить несколько значений в моей базе данных, но они ок.того же типа, так что теперь я не знаю, быстрее ли хранить эти значения в виде поля String в VARCHAR в MySQL, разделенного запятыми

1,2,3,4,5

и затем взорвать их каждый раз, когда они мне нужны

$values = explode(",", $stringFromDatabase);

где $ stringFromDatabase равно String из mysql_query + mysql_fetch_array и получайте их один за другим со значениями $ [0] , $ values ​​[1] и т. д.

ИЛИ

Добавить еще один столбец для каждой переменной (макс. 7 строк), а затем вызвать базу данных для конкретной строки и просто получить их отдельно по столбцам со стандартным mysql_query + mysql_fetch_array процедура?

Итак, один столбец объединен запятыми или несколькими столбцами?Важно отметить, что они мне всегда нужны (один за другим), и сортировка не важна - поэтому я думаю, что первый вариант - лучше , быстрее?

Ответы [ 5 ]

5 голосов
/ 19 марта 2011

Лучше иметь несколько столбцов. Это часть нормализации базы данных, чтобы не иметь многозначных столбцов.

В вашем случае - что, если вам нужно выбрать "3" из многозначного 1,2,3,4,5? Это было бы довольно сложно. Но с несколькими столбцами я могу легко сделать SELECT * FROM Table Where Column3 = 3.

3 голосов
/ 19 марта 2011

Используйте отдельный столбец для каждого значения.См 1NF

3 голосов
/ 19 марта 2011

Общее правило для баз данных: столбцы должны быть атомарными. Другими словами, они должны представлять одну часть информации и только одну. Встраивание списка CSV в столбец нарушает этот принцип и может усложнить вам жизнь в долгосрочной перспективе, особенно когда дело доходит до аналитики данных, которые вы сохранили. Я бы предположил, что лучше всего иметь один столбец на значение.

1 голос
/ 19 марта 2011

Вы не должны спрашивать "что быстрее".
Скорость не единственное, что нужно учитывать. Космическая ракета действительно быстрее вашей семейной машины, но вы не едете в торговый центр на ракете.
Итак, вы должны спросить «какой путь правильный» вместо этого.
И нормализовать вашу базу данных - единственный правильный путь.

0 голосов
/ 19 марта 2011

как насчет использования что-то вроде:

int AutoId, // your primary key
int ColumnIndex // 1 for col 1
int ColumnValue // the value for e.g. for col 1

this does not need space for unused columns and gives the benefit to query like

select ColumIndex, ColumnValue where AutoID = 42 order by ColumnIndex
...