будет ли monetdb работать быстрее с типами данных boolean или varchar(1)?

Будет ли запрос выполняться быстрее в столбце, определенном как 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

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


person Federico    schedule 20.02.2012    source источник


Ответы (1)


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

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

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

а) это позволяет избежать того, что люди вставляют другие строки, кроме «T» и «F»,

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

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

person Holger    schedule 23.02.2012
comment
Я второй @Holger по использованию логического значения. Я согласен со строками, сжатыми по словарю, но есть еще одна причина использовать логическое значение: многие внутренние операторы MonetDB оптимизированы для типов данных фиксированного размера и возвращаются к более общим алгоритмам для типов данных переменного размера (например, строк). - person cornuz; 12.03.2012