|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() François Développeur informatique Inscription : novembre 2002 Messages : 773 ![]() |
Bonjour,
J'ai eu jusqu'à ce jour à travailler avec des bases sur lesquelles je mettais en clé primaire des integer. Actuellement, je commence un nouveau travail sur une base avec l'ensemble de ses clés primaires avec des char(36) (sql serveur 2000). Pourriez-vous m'indiquer si un tel type de clé peut impacter au niveau des performances? Cordialement Pinocchio |
|
|
00
|
|
|
#2 |
![]() ![]() |
Etant donné que les clés sont de tailles fixes (elles le sont toujours de toutes façons), cela ne devrait pas impacter énormément... cependant, selon la méthode utilisée (sensible ou non à la casse, différences accents/pas accents, etc...), il est plus lourd de comparer des chaînes de caractères que des entiers
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() François Développeur informatique Inscription : novembre 2002 Messages : 773 ![]() |
Merci, je pensais que ca impacterais plus que ça.
Je laisse en cours dans l'attente d'autres avis. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Ces clef seront au minimum entre 8 et 30 fois moins rapide que des integers...
En effet un integer c'est 32 bits. Un char 36 c'est 256 bits. Un processeur ne sait travailler que par mots de 32 bits. Autrement dit il devra faire 8 passes (8 * 32 = 256) pour lire la clef. Pour la mise en relation il faudra donc doubler ce chiffre. De plus les littéraux possèdent une collation qui fait qu'ils ne sont pas directement l'expression binaire sous jacente. Par exemple avec la collation par défaut d'installationd e MSQ SQL Server les mots "DuPoNt" et "DUPONT" sont vu de manière identique. Pour cela, bien que les code caractères soient différents, il faut une table de translation pour éffectuer la comparaison. Donc un coût supplementaire qui double en général le coût de lecture. De plus, les structures d'index sous jacents à ce type de clef vont vite devenir très fragmentées à cause du fait que la valeur de la clef n'est pas monotone ni continue comme dans le cadre d'un auto incrément. Si vous voulez quelques démo spectaculaires sur le sujet, je vous invite à assiter à l'un de mes cours sur l'optimisation des données sous MS SQL Server à Orsys (cours SQO). A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 |
|
Membre chevronné
![]() François Développeur informatique Inscription : novembre 2002 Messages : 773 ![]() |
Merci pour ces informations
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com