OVH Cloud OVH Cloud

Tri sur un champs entier ou sur un champs texte ?

4 réponses
Avatar
asthenik
Bonjour,

Y a t-il une différence d'éxécution importante entre une recherche sur
un champs varchar et sur un champs entier ?

Il s'agit d'une recherche portant sur 10 millions de lignes, mon
alternative est entre :

- chaque ligne a un champs entier où chaque entier correspondant à un
mot (et la correspondance entre les mots et leur identifiant unique se
fait dans une table dictionnaire) ;

- chaque ligne a un un champs text où le mot est directement écrit ;

En terme de rapidité, il me semble très probable que le première
solution est plus satisfaisante. Pouvez-vous me le confirmer ?

Cordialement,

--
asthenik

4 réponses

Avatar
bruno reiter [MVP]
une col de type int à une longueur de 4 Bytes
ton texte n Bytes

fais le rapport de ton n à 4 et tu vas voir.
Sauf s'il s'agit de l'index cluster, puisque dans ce cas il s'agit du
stockage de la ligne complète

br

"sylvain" wrote in message
news:
Bonjour,

Y a t-il une différence d'éxécution importante entre une recherche sur
un champs varchar et sur un champs entier ?

Il s'agit d'une recherche portant sur 10 millions de lignes, mon
alternative est entre :

- chaque ligne a un champs entier où chaque entier correspondant à un
mot (et la correspondance entre les mots et leur identifiant unique se
fait dans une table dictionnaire) ;

- chaque ligne a un un champs text où le mot est directement écrit ;

En terme de rapidité, il me semble très probable que le première
solution est plus satisfaisante. Pouvez-vous me le confirmer ?

Cordialement,

--
asthenik


Avatar
Fred
Dans le message:,
bruno reiter [MVP] écrit :
une col de type int à une longueur de 4 Bytes
ton texte n Bytes

fais le rapport de ton n à 4 et tu vas voir.
Sauf s'il s'agit de l'index cluster, puisque dans ce cas il s'agit du
stockage de la ligne complète



[]

- chaque ligne a un champs entier où chaque entier correspondant à un
mot (et la correspondance entre les mots et leur identifiant unique
se fait dans une table dictionnaire) ;





Bonjour,
Le fait de mettre un index sur la colonne de type caractères ne met-il pas
en place un système 'équivalent' à la table dictionnaire à laquelle fait
allusion Sylvain ?
J'aurais tendance à penser qu'il faut mieux laisser faire SQL Server que de
vouloir le faire 'à la main'.

--
Fred
Avatar
Patrice
Cela doit être facile à tester ;-)

Ma préférence personnelle est de commencer par ce qui est "logique" et
"raisonnable" et d'affiner en fonction des performances constatées.

Ici sauf champ d'une longueur invraisemblable ou si les valeurs doivent être
naturellement contrainte (dans ce cas le texte serait rejété dans une table
étrangère avec fk numérique), je créerais un champ texte indexé et je
regarderais ce que j'obtiens comme performance.

Patrice

--

"sylvain" a écrit dans le message de
news:
Bonjour,

Y a t-il une différence d'éxécution importante entre une recherche sur
un champs varchar et sur un champs entier ?

Il s'agit d'une recherche portant sur 10 millions de lignes, mon
alternative est entre :

- chaque ligne a un champs entier où chaque entier correspondant à un
mot (et la correspondance entre les mots et leur identifiant unique se
fait dans une table dictionnaire) ;

- chaque ligne a un un champs text où le mot est directement écrit ;

En terme de rapidité, il me semble très probable que le première
solution est plus satisfaisante. Pouvez-vous me le confirmer ?

Cordialement,

--
asthenik


Avatar
Fred BROUARD
La différence est énorme...

Le type entier INTEGER est la représentation exacte du mot du processeur (32
bits). Il n'y a donc ni calcul préalable ni transformation avant recherche.

Le type VARCHAR implique un jeu de caractères + une collation. De plus il
encapsule la longueur rélle de la donnée. Il y a donc 3 traitements
supplémentaires lors de toute recherche. En sus il faut ajouter que si le mot
cherché est de plus de 4 caractères, il faudra le traiter en plusieurs passe au
niveau du processeur. Par exemple pour un VARCHAR de 10, il faut compter sur une
différence maximale et théorique de traitement de l'ordre de 24.

Autrement dit, dans la cas d'un VARCHAR(10) et d'un INTEGER, l'INTEGER au plus
24 fois plus rapide.

Sur des millions de lignes, c'est plus qu'important. C'est ce qui fait une base
de données inexploitable !

sylvain a écrit:
Bonjour,

Y a t-il une différence d'éxécution importante entre une recherche sur
un champs varchar et sur un champs entier ?

Il s'agit d'une recherche portant sur 10 millions de lignes, mon
alternative est entre :

- chaque ligne a un champs entier où chaque entier correspondant à un
mot (et la correspondance entre les mots et leur identifiant unique se
fait dans une table dictionnaire) ;

- chaque ligne a un un champs text où le mot est directement écrit ;

En terme de rapidité, il me semble très probable que le première
solution est plus satisfaisante. Pouvez-vous me le confirmer ?

Cordialement,




--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************