SQL: что лучше бит или char (1)

Есть ли разница производительность при извлечении бит или char (1)?

Просто для любопытства =]

ОБНОВЛЕНИЕ: Предположим, что я использую SQL Server 2008!

Ответ 1

Для SQL Server: до 8 столбцов типа BIT могут храниться в одном байте, а каждый столбец типа CHAR(1) занимает один байт.

С другой стороны: столбец BIT может иметь два значения (0 = false, 1 = true) или вообще не иметь значения (NULL) - в то время как CHAR(1) может иметь любое значение символа (гораздо больше возможностей)

Итак, это сводится к:

  • Вам действительно нужно поле true/false (yes/no)? Если это так: используйте BIT
  • Вам нужно что-то с более чем двумя возможными значениями - используйте CHAR(1)

Я не думаю, что это имеет какое-то существенное отличие, с точки зрения производительности - если у вас нет десятков тысяч столбцов. Тогда, конечно, использование BIT, которое может хранить до 8 столбцов в одном байте, было бы полезно. Но опять же: для вашего "нормального" случая базы данных, где у вас есть несколько, дюжина этих столбцов, это действительно не имеет большого значения. Выберите тип столбца, который соответствует вашим потребностям - не беспокойтесь о производительности.....

Ответ 2

Это зависит от реализации. Одна СУБД может иметь такую ​​же производительность, в то время как другая может иметь отличия.

Ответ 3

бит, а char (1) оба возьмут 1 байт для хранения, предположив, что в таблице имеется только 1 бит столбца, SQL Server будет хранить tp 8 бит столбцов в 1 байт. Я не думаю, что есть разница в производительности.

Одна вещь, о которой нужно знать, состоит в том, что вы не можете делать сумму в столбце бит

CREATE TABLE #test( a BIT)

INSERT #test VALUES (1)
INSERT #test VALUES (1)

SELECT sum(a) FROM #test

Msg 8117, уровень 16, состояние 1, строка 1
Бит типа данных операнда недействителен для оператора суммы.

вам нужно сначала преобразовать его

SELECT sum(CONVERT(INT,a)) FROM #test

Ответ 4

Как говорит Адам, это зависит от базы данных, использующей типы данных, но теоретически имеет место следующее:

Bit:

Будет сохранять 1 или 0 или null. Требуется только бит для сохранения значения (по определению!). Обычно используется для истинных или ложных, и многие языки программирования будут интерпретировать бит как истинное или ложное поле автоматически.

Char [1]:

A char берет 8 бит или один байт, поэтому он хранится в 8 раз больше. Вы можете хранить (в значительной степени) любого персонажа там. Вероятно, это будет интерпретироваться как строка с помощью языков программирования. Я думаю, что Char [1] всегда будет принимать полный байт, даже если он пуст, если вы не используете varchar или nvarchar.

Ответ 5

используйте бит. ВСЕГДА используйте наименьший возможный тип данных. это важно, когда вы начинаете получать большие таблицы.