При настройке схемы MySQL зачем использовать определенные типы?

0

Когда я настраиваю таблицу MySQL, мне предлагается определить имя столбца, тип ввода и длину. Мое предположение, не прочитав ничего об этом, заключается в том, что оно для минимизации. Укажите наименьший возможный int/smallint/tinyint для ваших нужд, и это уменьшит некоторые издержки. Если все это положительно, сделайте его без знака, чтобы удвоить пространство и т.д.

Что произойдет, если я просто сделаю каждое поле символом varchar-200? Когда/почему это плохо, что я пропущу, и когда будут проявляться какие-либо неэффективности? 100 тыс. Записей?

Я думаю об этом каждый раз, когда я настраиваю БД, но я не создал ничего, чтобы масштабировать, где у меня когда-либо была неправильная настройка схемы, либо слишком "строгая/маленькая", либо "свободная/большая". Может кто-то подтвердить, что я делаю хорошие предположения о скорости и эффективности?

Спасибо!

Теги:
database

3 ответа

3
Лучший ответ

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

Уровень, на котором эти неэффективности становятся проблемой, во многом зависит от вашего оборудования и дизайна вашего приложения. В наши дни у нас достаточно много железа, что, если вы создаете умеренные приложения, вы не увидите заметной разницы. (Помимо ощущения немного вины в отношении дизайна вашей базы данных!) Но установление хороших привычек на небольших проектах делает более легкими, когда они приходят.

  • 0
    Я хотел бы добавить при изменении длины поля и типов, используемых для объединения таблиц, убедитесь, что вы всегда меняете их в обоих местах. Объединение таблиц по неидентичным признакам происходит почти так же медленно, как и отсутствие индекса вообще.
0

Конечно, вы могли бы сохранить все как строки VARCHAR. Но вы бы отказались от многих функций, предоставляемых механизмом базы данных.

Вы должны выбрать тип базы данных, который наиболее точно соответствует предполагаемому использованию столбца. Например, использование DATE или DATETIME для хранения дат предоставляет вам все виды функций даты и времени, которые вы не получаете с базовыми типами VARCHAR.

Аналогично, поля, используемые для подсчета или предоставления простых уникальных идентификаторов, должны быть INT или один из связанных с ним типов. Также имейте в виду, что INT занимает всего 4 байта, тогда как 9-значная строка использует не менее 9 байтов.

Для символьных данных целесообразно использовать NVARCHAR для интернационализированных значений, которые будут вводить пользователи в любой локали (например, имена и местоположения). Если вы знаете, что текст ограничен только US или внутренним использованием, VARCHAR безопасен.

0

Если у вас есть два столбца как varchar и введите значения 10 и 20 и добавьте их, вы получите 1020 вместо 30, которые вы, вероятно, ожидаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню