TINYINT vs ENUM (0, 1) для булевых значений в MySQL

Какой из них лучше, 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.

Об этом говорит барон Шварц.

http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

Я бы предложил, чтобы ENUM был предпочтительнее, потому что он ясно показывает, что ожидается; если это отвлекает от производительности каким-либо измеримым способом, я был бы очень удивлен. Чтобы сделать tinyint, эта работа потребует CHECK ограничение для столбца; В настоящее время ни один из механизмов хранения MySQL не поддерживает это.

Enum, в некотором смысле дает «подсказку» для разработчиков или программистов. Но, как правило, лучше обращаться с программным обеспечением. Итак, будь то ENUM (0,1), BIT (1) и TINYINT (1), все с использованием 1 байта, было бы лучше, в большинстве случаев, обрабатываться на стороне клиента, а не отправлять 2 в бит (1) или перечислить (0,1) на сервер, а затем сервер вернет ошибку, с которой вам придется обращаться в любом случае – использует больше ресурсов (сетевой сервер + сервер + клиентский процессор x 2)

0 обычно означает false, 1 true.