True/False vs 0/1 в mySQL

Что быстрее в базе данных mySQL? Булевы или ноль и один для представления булевых значений? Мой интерфейс просто имеет переключатель "да/нет".

31
01 июня '12 в 17:40
источник поделиться
4 ответов

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

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

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

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

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

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

34
01 июня '12 в 17:50
источник

Связанные вопросы


Похожие вопросы

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

Итак, в основном это одно и то же, но mySQL конвертируется в 0/1 - так что просто используйте TINYINT, если вам это проще

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

17
01 июня '12 в 17:42
источник

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
01 июня '12 в 18:00
источник

Если вы работаете в производительности, то стоит использовать тип 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 Предложить структуру таблицы таблиц - но это более длительная возможность оптимизации, когда таблица уже заполнена большим количеством данных.

2
01 июня '12 в 18:00
источник

Посмотрите другие вопросы по метке или Задайте вопрос