Есть ли разница производительность при извлечении бит или char (1)?
Просто для любопытства =]
ОБНОВЛЕНИЕ: Предположим, что я использую SQL Server 2008!
Есть ли разница производительность при извлечении бит или char (1)?
Просто для любопытства =]
ОБНОВЛЕНИЕ: Предположим, что я использую SQL Server 2008!
Для SQL Server: до 8 столбцов типа BIT
могут храниться в одном байте, а каждый столбец типа CHAR(1)
занимает один байт.
С другой стороны: столбец BIT
может иметь два значения (0 = false, 1 = true) или вообще не иметь значения (NULL) - в то время как CHAR(1)
может иметь любое значение символа (гораздо больше возможностей)
Итак, это сводится к:
BIT
CHAR(1)
Я не думаю, что это имеет какое-то существенное отличие, с точки зрения производительности - если у вас нет десятков тысяч столбцов. Тогда, конечно, использование BIT
, которое может хранить до 8 столбцов в одном байте, было бы полезно. Но опять же: для вашего "нормального" случая базы данных, где у вас есть несколько, дюжина этих столбцов, это действительно не имеет большого значения. Выберите тип столбца, который соответствует вашим потребностям - не беспокойтесь о производительности.....
Это зависит от реализации. Одна СУБД может иметь такую же производительность, в то время как другая может иметь отличия.
бит, а 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
Как говорит Адам, это зависит от базы данных, использующей типы данных, но теоретически имеет место следующее:
Bit:
Будет сохранять 1 или 0 или null. Требуется только бит для сохранения значения (по определению!). Обычно используется для истинных или ложных, и многие языки программирования будут интерпретировать бит как истинное или ложное поле автоматически.
Char [1]:
A char берет 8 бит или один байт, поэтому он хранится в 8 раз больше. Вы можете хранить (в значительной степени) любого персонажа там. Вероятно, это будет интерпретироваться как строка с помощью языков программирования. Я думаю, что Char [1] всегда будет принимать полный байт, даже если он пуст, если вы не используете varchar или nvarchar.
используйте бит. ВСЕГДА используйте наименьший возможный тип данных. это важно, когда вы начинаете получать большие таблицы.