2010-05-22 2 views
3

У меня есть несколько таблиц с некоторыми довольно стандартными данными в каждом. Может ли кто-нибудь помочь мне оптимизировать их, указав мне лучшие типы столбцов для этих данных. Что у них есть то, что у меня есть сейчас.Каковы наиболее эффективные типы столбцов MySQL для этих данных?

Number (max length 7) --> MEDIUMINT(8) Unsigned 
Text (max length 30) --> VARCHAR(30) 
Text (max length 200) --> VARCHAR(200) 
Email Address (max length 200) --> VARCHAR(200) 
Number (max length 4) --> SMALLINT(5) Unsigned 
Number (either 0 or 1) --> TINYINT(1) Unsigned 
Text (max length 500) --> TEXT 

Любые предложения? Я просто догадываюсь об этом, поэтому я знаю, что некоторые из них ошибаются ...

ответ

0
Number (either 0 or 1) --> TINYINT(1) Unsigned 

Это должно быть булево.

+0

Я искал Google для баз данных Boolean и придумал http://stackoverflow.com/questions/289727/which-mysql-datatype-to-use-for-storing-boolean-values-from-to-php Сменился ли этот факт с тех пор или существуют ли какие-либо другие преимущества для использования типа данных типа boolean? – Derek

1

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

Для VARCHAR типов, как вы, вероятно, уже знаете, ограничивает максимальную длину. Однако это не влияет на количество байтов, используемых для хранения определенной строки. Строка длиной 5 потребует того же количества байтов хранения, независимо от того, хранится ли она в VARCHAR(100) или VARCHAR(200).

Для целочисленных типов число не имеет ничего общего с количеством байтов хранения. Это ширина дисплея, что-то еще. Смотрите manual:

Другое расширение поддерживается MySQL для необязательно, указав ширину отображения целочисленных типов данных в скобках после ключевого слова для базового типа (например, INT (4)). Эта дополнительная ширина экрана может использоваться приложениями для отображения целочисленных значений, имеющих ширину, меньшую ширины, указанной для столбца, путем добавления пробелов влево. (То есть эта ширина присутствует в метаданных, возвращаемых с наборами результатов. Используется ли она или нет до приложения.)

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

0

У вас уже есть разумный смысл.

Обратите внимание: вы не можете ничего оптимизировать с помощью типов столбцов. С индексами вы делаете.

+0

Мне нужен краш-курс в Индексах, на данный момент я просто догадываюсь и делаю идентификатор как первичный уникальный и надеюсь, что ничего не сломается. – Derek

0

В зависимости от вашего определения "эффективный". Для скорости CHAR может быть быстрее, чем VARCHAR (поскольку каждая строка заканчивается одинаковой длины, что упрощает поиск данной записи). Но все ваши поля должны иметь фиксированную длину или не беспокоить.

+0

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

+0

Современные базы данных используют индексы для поиска определенной записи (то есть: сказать «запись с x = 3 - это запись #R», а затем другой (встроенный) индекс, чтобы увидеть «запись R находится в позиции P в данных таблицы файл ". Если все записи имеют одинаковый размер, последний поиск можно пропустить полностью. – cHao