2 votes

Monetdb fonctionnerait-il plus rapidement avec des types de données boolean ou varchar(1) ?

Une requête s'exécutera-t-elle plus rapidement dans une colonne définie comme boolean ou comme varchar(1) dans monetdb ?

Les requêtes ressembleraient à ce qui suit :

avec varchar(1)

select * from many_many_rows where has_fancy_value = 'T'

avec booléen

select * from many_many_rows where has_fancy_value = true

Y a-t-il une différence en termes de performances ?

4voto

Holger Points 468

Cela ne devrait pas faire de différence.

Étant donné que MonetDB compresse les chaînes dans le dictionnaire, seuls les pointeurs dans le dictionnaire sont stockés. Lors d'un balayage-sélection sur une colonne de chaîne et si le dictionnaire est petit, il balayera d'abord le dictionnaire pour obtenir le pointeur de la valeur, puis il balayera la table en utilisant ce pointeur. Si le dictionnaire est suffisamment petit, il utilisera un seul octet comme pointeur (ou décalage de pointeur). Étant donné qu'un booléen est également stocké sous la forme d'un octet et que la surcharge du dictionnaire peut être négligée, cela ne devrait pas faire de différence.

Je suggère fortement d'utiliser néanmoins les booléens, car

a) il permet d'éviter que les gens ne mettent d'autres chaînes que "T" et "F",

b) vous évitez la confusion sur la casse : "T" contre "t" et

c) un jour, Monet pourrait prendre en charge des types de données plus petits que l'octet (il existe des projets en ce sens et cela pourrait donc se produire... ou pas :-)).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X