在monetdb中定義爲布爾值或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
有什麼不同的表現明智
在monetdb中定義爲布爾值或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
有什麼不同的表現明智
它不應該有所作爲。
由於MonetDB字典壓縮字符串,只有指向字典的指針才被存儲。當在字符串列上進行掃描選擇並且字典很小時,它將首先掃描字典以獲取值的指針,然後使用該指針掃描表。如果字典足夠小,它將使用單個字節作爲指針(或指針偏移量)。由於布爾值也作爲字節存儲,並且字典的開銷可以忽略不計,所以它不應該有所作爲。
我強烈建議仍然使用布爾,因爲
一)它避免人們把其他字符串不是「T」和「F」中,
b)您避免有關案件的困惑:'T'與't'和
c)有一天,莫奈可能會支持小於字節的數據類型(對於存在的計劃,所以它可能實際發生......或不:-))。
我第二@Holger使用布爾值。我同意字典壓縮的字符串,但是還有一個理由使用布爾值:許多MonetDB的內部運算符都針對固定大小的數據類型進行了優化,並且可以回到可變大小數據類型(比如字符串)的更一般的算法中。 – cornuz 2012-03-12 10:39:19