monetdb使用boolean或varchar(1)数据类型会更快吗?

时间:2012-02-20 20:12:40

标签: monetdb

查询在monetdb中定义为boolean或varchar(1)的列中运行得更快吗?

查询看起来像:

使用varchar(1)

select * from many_many_rows where has_fancy_value = 'T'

with boolean

select * from many_many_rows where has_fancy_value = true

性能方面是否存在差异

1 个答案:

答案 0 :(得分:4)

它不应该有所作为。

由于MonetDB字典压缩字符串,因此只存储指向字典的指针。当在字符串列上进行扫描选择并且字典很小时,它将首先扫描字典以获取值的指针,然后使用该指针扫描表。如果字典足够小,它将使用单个字节作为指针(或指针偏移)。由于布尔值也存储为一个字节,并且字典的开销可以忽略不计,因此它不应该有所作为。

我强烈建议使用布尔值,因为

a)它避免了人们使用“T”和“F”之外的其他字符串,

b)你避免混淆案件:'T'与't'和

c)有一天,Monet可能支持小于字节的数据类型(存在的计划因此实际上可能发生......或者不是: - ))。