查询在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
性能方面是否存在差异
答案 0 :(得分:4)
它不应该有所作为。
由于MonetDB字典压缩字符串,因此只存储指向字典的指针。当在字符串列上进行扫描选择并且字典很小时,它将首先扫描字典以获取值的指针,然后使用该指针扫描表。如果字典足够小,它将使用单个字节作为指针(或指针偏移)。由于布尔值也存储为一个字节,并且字典的开销可以忽略不计,因此它不应该有所作为。
我强烈建议使用布尔值,因为
a)它避免了人们使用“T”和“F”之外的其他字符串,
b)你避免混淆案件:'T'与't'和c)有一天,Monet可能支持小于字节的数据类型(存在的计划因此实际上可能发生......或者不是: - ))。