Подтвердить что ты не робот

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

Какой из них лучше, Tinyint с 0 и 1 значениями или ENUM 0,1 в таблицах MyISAM и MySQL 5.1?

4b9b3361

Ответ 1

Вы можете использовать BIT(1), как указано в ссылка mysql 5.1. я не буду рекомендовать enum или tinyint(1) поскольку BIT(1) требуется только 1 бит для хранения логического значения, а tinyint(1) - 8 бит.

Ответ 2

Мои исследования показывают, что 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/

Ответ 3

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

Ответ 4

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

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