Какой из них лучше, Tinyint с 0 и 1 значениями или ENUM 0,1 в таблицах MyISAM и MySQL 5.1?
Вы можете использовать BIT(1)
как указано в ссылке mysql 5.1 . я не буду рекомендовать enum
или tinyint(1)
как bit(1)
нуждается только в 1 бит для хранения логического значения, а tinyint(1)
8 бит.
Мое исследование показывает, что BIT (1) является синонимом TINYINT (1) для версий MySQL до 5.0.3.
MySQL версии после версии 5.0.3 изменяют тип данных BIT. Он больше не является синонимом TINYINT и является единственным типом данных, который позволяет хранить что-либо менее чем за один байт.
Этот тип данных может быть предпочтительным для использования TINYINT или ENUM. Я планирую тестирование, чтобы узнать, какой из них самый быстрый, и использование пространства трех в моем блоге. Существует ссылка внизу, если вы хотите увидеть размер и скорость. Testbed: crummy потребительского класса Pentium III с OpenBSD и MySQL. (С более медленным блоком DB dev вы действительно можете почувствовать эффекты плохого кода. Кроме того, различия между тестовыми запросами более заметны. Кроме того, попробуйте использовать виртуальную машину с едва достаточным количеством ресурсов.)
Официальная документация MySQL.
Об этом говорит барон Шварц.
Я бы предложил, чтобы ENUM был предпочтительнее, потому что он ясно показывает, что ожидается; если это отвлекает от производительности каким-либо измеримым способом, я был бы очень удивлен. Чтобы сделать tinyint, эта работа потребует CHECK ограничение для столбца; В настоящее время ни один из механизмов хранения MySQL не поддерживает это.
Enum, в некотором смысле дает «подсказку» для разработчиков или программистов. Но, как правило, лучше обращаться с программным обеспечением. Итак, будь то ENUM (0,1), BIT (1) и TINYINT (1), все с использованием 1 байта, было бы лучше, в большинстве случаев, обрабатываться на стороне клиента, а не отправлять 2 в бит (1) или перечислить (0,1) на сервер, а затем сервер вернет ошибку, с которой вам придется обращаться в любом случае – использует больше ресурсов (сетевой сервер + сервер + клиентский процессор x 2)
0 обычно означает false, 1 true.