2

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

查询看起来像:

使用 varchar(1)

select * from many_many_rows where has_fancy_value = 'T'

带布尔值

select * from many_many_rows where has_fancy_value = true

在性能方面是否有任何差异

4

1 回答 1

4

它不应该有所作为。

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

尽管如此,我还是强烈建议使用布尔值,因为

a) 它避免了人们将除 'T' 和 'F' 之外的其他字符串放入,

b)您避免混淆案例:“T”与“t”和

c) 有一天,莫奈可能会支持小于字节的数据类型(存在这样的计划,因此它可能真的会发生......或者不会:-))。

于 2012-02-23T10:26:36.790 回答