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