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

Верно/Неверно против 0/1 в MySQL

Что быстрее в базе данных MySQL? Booleans, или использовать ноль и единицу для представления логических значений? У моего интерфейса только есть кнопка "да/нет".

4b9b3361

Ответ 1

Некоторые "передние концы" с включенной опцией "Использовать булевы" будут обрабатывать все столбцы TINYINT (1) как Boolean и наоборот.

Это позволяет вам в приложении использовать TRUE и FALSE, а не 1 и 0.

Это не влияет на базу данных вообще, поскольку она реализована в приложении.

В MySQL нет типа BOOLEAN. BOOLEAN является просто синонимом TINYINT (1), а TRUE и FALSE являются синонимами для 1 и 0.

Если преобразование выполняется в компиляторе, не будет никакой разницы в производительности в приложении. В противном случае разница все равно не будет заметной.

Вы должны использовать тот метод, который позволяет вам более эффективно кодировать код, но не использовать эту функцию может уменьшить зависимость от этого конкретного поставщика "front end".

Ответ 2

В MySQL TRUE и FALSE являются синонимами для TINYINT(1).

Поэтому, в принципе, это то же самое, но MySQL конвертирует в 0/1 - так что просто используйте TINYINT, если вам проще

P.S.
Производительность, вероятно, будет настолько крошечной (если вообще), что если вам нужно будет спросить у Qaru, то это не повлияет на вашу базу данных :)

Ответ 3

Bit также является опцией, если tinyint вам не по душе. Несколько ссылок:

Неудивительно, что больше информации о числовых типах доступно в руководстве.

Еще одна ссылка: http://blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/

И цитата из раздела комментариев статьи выше:

  • TINYINT (1) не является синонимом бит (1).
  • TINYINT (1) может хранить -9 до 9.
  • TINYINT (1) UNSIGNED: 0-9
  • BIT (1): 0, 1. (бит, буквально).

Изменить: это редактирование (и ответ) только удаленно связано с исходным вопросом...

Дополнительные цитаты Джастина Рована и автора maclochlainn (раздел комментариев связанной статьи).

Простите, кажется, я пал жертвой субстрата: TINYINT (1): -128- + 127 TINYINT (1) НЕ ПОДПИСАНО: 0-255 (Джастин Рованг 25 августа 11 в 16:32)

Правда, но сообщение было о том, что PHPMyAdmin указано как Boolean, и там он использует только 0 или 1 из всего широкого спектра из 256 возможностей. (maclochlainn 25 августа 11 в 11:35)

Ответ 4

Если вы работаете в производительности, то стоит использовать тип ENUM. Это, вероятно, будет быстрее на больших таблицах из-за лучшей производительности индекса.

Способ его использования (источник: http://dev.mysql.com/doc/refman/5.5/en/enum.html):

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

Но я всегда говорю, что объясняю такой запрос:

EXPLAIN SELECT * FROM shirts WHERE size='medium';

расскажет вам много информации о вашем запросе и поможет построить лучшую структуру таблицы. Для этого полезно использовать phpmyadmin Предложить структуру таблицы таблиц - но это более длительная возможность оптимизации, когда таблица уже заполнена большим количеством данных.