будет работать monetdb быстрее с типами данных boolean или varchar (1)? - PullRequest
2 голосов
/ 21 февраля 2012

Будет ли запрос выполняться быстрее в столбце, определенном как boolean или как varchar (1) в monetdb?

запросы будут выглядеть так:

с varchar (1)

select * from many_many_rows where has_fancy_value = 'T'

с логическим значением

select * from many_many_rows where has_fancy_value = true

Есть ли разница в производительности?

1 Ответ

4 голосов
/ 23 февраля 2012

Это не должно иметь значения.

Поскольку словарь MonetDB сжимает строки, в нем хранятся только указатели. При выборе сканирования для строки-столбца и небольшого словаря он сначала сканирует словарь, чтобы получить указатель для значения, а затем сканирует таблицу, используя этот указатель. Если словарь достаточно мал, он будет использовать один байт в качестве указателя (или смещение указателя). Поскольку логическое значение также сохраняется в виде байта, а служебными данными для словаря можно пренебречь, это не должно иметь значения.

Тем не менее, я бы настоятельно рекомендовал использовать логическое значение, потому что

a) избегает того, чтобы люди вставляли строки, отличные от 'T' и 'F',

б) вы избегаете путаницы по делу: «Т» против «т» и

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

...