Это зависит.
Если вы хотите максимизировать скорость выбора, используйте int (tinyint для экономии места), потому что бит в предложении where медленнее, чем int (не радикально, но каждая миллисекунда считается). Также сделайте столбец не нулевым, что также ускоряет процесс. Ниже приведена ссылка на реальный тест производительности, который я бы порекомендовал запустить в вашей собственной базе данных, а также расширить его, используя не нули, индексы и используя несколько столбцов одновременно. Дома я даже пытался сравнить, используя несколько битовых столбцов и несколько столбцов tinyint, а столбцы tinyint были быстрее (select count(*) where A=0 and B=0 and C=0
). Я думал, что SQL Server (2014) оптимизирует, выполняя только одно сравнение с использованием битовой маски, поэтому он должен быть в три раза быстрее, но это не так. Если вы используете индексы, вам потребуется более 5000000 строк (как в тесте), чтобы заметить разницу (что у меня не хватило терпения, поскольку заполнение таблицы несколькими миллионами строк заняло бы много времени на моей машине).
https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for-bit-data-type-in-a-where-clause/
Если вы хотите сэкономить место, используйте бит, поскольку 8 из них могут занимать один байт, тогда как 8 крошечных будут занимать 8 байтов. Что составляет около 7 мегабайт на каждый миллион строк.
Различия между этими двумя случаями в основном пренебрежимо малы, и поскольку использование бита имеет преимущество в том, что столбец представляет просто флаг, я бы рекомендовал использовать бит.