OVH Cloud OVH Cloud

question technique

8 réponses
Avatar
alain
question sur les indexes..

j'ai 2 tables de donn=E9es (A et C) et une table de=20
correspondances entre les deux (B)

la table (B) contient juste 2 champs=20
qui correspondent aux cles primaires de (A) et (C)
et elle possede un index a deux champs.

la question est la suivante:

est ce qu'un index a deux champs est equivalent a deux=20
indexes qui contiennent un champ chacun. sur le principe=20
je sais que non, mais plus precisement je voudrais savoir=20
si, dans le cas ou je ne ferais une recherche que sur un=20
seul champ, sql server va se servir quand meme de l'indexe=20
a double champs ou si il faut ajouter deux indexes=20
separament pour chaque champs en plus de l'index primaire?


dans ce cas, pour une souplesse totale? il faudrait que ma=20
table (B) des correspondances contiennent 3 indexes.=20

1) 1 index de cle primaire qui contient les deux champs
2) 1 index simple qui contient le champ 1
3) 1 index simple qui contient le champ 2

est ce que l'option 1) serait suffisante pour tout ou est=20
il obligatoire de proceder ainsi?

8 réponses

Avatar
bruno reiter [MVP]
il faut 2 index composés : champ1+champ2, champ2+champ1

br


"alain" wrote in message
news:0fbd01c4a866$4ea20cb0$

question sur les indexes..

j'ai 2 tables de données (A et C) et une table de
correspondances entre les deux (B)

la table (B) contient juste 2 champs
qui correspondent aux cles primaires de (A) et (C)
et elle possede un index a deux champs.

la question est la suivante:

est ce qu'un index a deux champs est equivalent a deux
indexes qui contiennent un champ chacun. sur le principe
je sais que non, mais plus precisement je voudrais savoir
si, dans le cas ou je ne ferais une recherche que sur un
seul champ, sql server va se servir quand meme de l'indexe
a double champs ou si il faut ajouter deux indexes
separament pour chaque champs en plus de l'index primaire?


dans ce cas, pour une souplesse totale? il faudrait que ma
table (B) des correspondances contiennent 3 indexes.

1) 1 index de cle primaire qui contient les deux champs
2) 1 index simple qui contient le champ 1
3) 1 index simple qui contient le champ 2

est ce que l'option 1) serait suffisante pour tout ou est
il obligatoire de proceder ainsi?
Avatar
Fred BROUARD
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage et assurera un parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
il faut 2 index composés : champ1+champ2, champ2+champ1

br


"alain" wrote in message
news:0fbd01c4a866$4ea20cb0$

question sur les indexes..

j'ai 2 tables de données (A et C) et une table de
correspondances entre les deux (B)

la table (B) contient juste 2 champs
qui correspondent aux cles primaires de (A) et (C)
et elle possede un index a deux champs.

la question est la suivante:

est ce qu'un index a deux champs est equivalent a deux
indexes qui contiennent un champ chacun. sur le principe
je sais que non, mais plus precisement je voudrais savoir
si, dans le cas ou je ne ferais une recherche que sur un
seul champ, sql server va se servir quand meme de l'indexe
a double champs ou si il faut ajouter deux indexes
separament pour chaque champs en plus de l'index primaire?


dans ce cas, pour une souplesse totale? il faudrait que ma
table (B) des correspondances contiennent 3 indexes.

1) 1 index de cle primaire qui contient les deux champs
2) 1 index simple qui contient le champ 1
3) 1 index simple qui contient le champ 2

est ce que l'option 1) serait suffisante pour tout ou est
il obligatoire de proceder ainsi?







--
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 *************************
Avatar
donc mon utilisation de depart est pas mauvaise... j'avais
un doute... :)

sinon, je suis pas trop daccord sur l'idee que cela ne
prenne pas plus de volume de stockage... Il faut quand
meme les enregistrer ces indexes non?


-----Message d'origine-----
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage et


assurera un parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
il faut 2 index composés : champ1+champ2, champ2+champ1

br


"alain" wrote in




message
news:0fbd01c4a866$4ea20cb0$

question sur les indexes..

j'ai 2 tables de données (A et C) et une table de
correspondances entre les deux (B)

la table (B) contient juste 2 champs
qui correspondent aux cles primaires de (A) et (C)
et elle possede un index a deux champs.

la question est la suivante:

est ce qu'un index a deux champs est equivalent a deux
indexes qui contiennent un champ chacun. sur le principe
je sais que non, mais plus precisement je voudrais




savoir
si, dans le cas ou je ne ferais une recherche que sur un
seul champ, sql server va se servir quand meme de




l'indexe
a double champs ou si il faut ajouter deux indexes
separament pour chaque champs en plus de l'index




primaire?


dans ce cas, pour une souplesse totale? il faudrait que




ma
table (B) des correspondances contiennent 3 indexes.

1) 1 index de cle primaire qui contient les deux champs
2) 1 index simple qui contient le champ 1
3) 1 index simple qui contient le champ 2

est ce que l'option 1) serait suffisante pour tout ou




est
il obligatoire de proceder ainsi?







--
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


*************************

.



Avatar
bruno reiter [MVP]
à mon avis, comme les deux cols sont PK dans d'autres tables, les colonnes
sont de petite taille.

d'autre part comme il n'y a que deux colonnes, si on prend comme index
col1+col2 et col2+col1, on aura toujours un index couvrant et on pourra
toujours les utiliser de manière optimale si on a une jointure, un tri ou
une sélection.

br

"Fred BROUARD" wrote in message
news:#
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage et assurera un


parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
> il faut 2 index composés : champ1+champ2, champ2+champ1
>
> br
>
>
> "alain" wrote in message
> news:0fbd01c4a866$4ea20cb0$
>
> question sur les indexes..
>
> j'ai 2 tables de données (A et C) et une table de
> correspondances entre les deux (B)
>
> la table (B) contient juste 2 champs
> qui correspondent aux cles primaires de (A) et (C)
> et elle possede un index a deux champs.
>
> la question est la suivante:
>
> est ce qu'un index a deux champs est equivalent a deux
> indexes qui contiennent un champ chacun. sur le principe
> je sais que non, mais plus precisement je voudrais savoir
> si, dans le cas ou je ne ferais une recherche que sur un
> seul champ, sql server va se servir quand meme de l'indexe
> a double champs ou si il faut ajouter deux indexes
> separament pour chaque champs en plus de l'index primaire?
>
>
> dans ce cas, pour une souplesse totale? il faudrait que ma
> table (B) des correspondances contiennent 3 indexes.
>
> 1) 1 index de cle primaire qui contient les deux champs
> 2) 1 index simple qui contient le champ 1
> 3) 1 index simple qui contient le champ 2
>
> est ce que l'option 1) serait suffisante pour tout ou est
> il obligatoire de proceder ainsi?
>
>
>
>

--
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 *************************



Avatar
concretement ca fait 4 indexes au lieu de 3 ca


-----Message d'origine-----
à mon avis, comme les deux cols sont PK dans d'autres


tables, les colonnes
sont de petite taille.

d'autre part comme il n'y a que deux colonnes, si on


prend comme index
col1+col2 et col2+col1, on aura toujours un index


couvrant et on pourra
toujours les utiliser de manière optimale si on a une


jointure, un tri ou
une sélection.

br

"Fred BROUARD" wrote in


message
news:#
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage




et assurera un
parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
> il faut 2 index composés : champ1+champ2,




champ2+champ1
>
> br
>
>
> "alain" wrote




in message
> news:0fbd01c4a866$4ea20cb0$
>
> question sur les indexes..
>
> j'ai 2 tables de données (A et C) et une table de
> correspondances entre les deux (B)
>
> la table (B) contient juste 2 champs
> qui correspondent aux cles primaires de (A) et (C)
> et elle possede un index a deux champs.
>
> la question est la suivante:
>
> est ce qu'un index a deux champs est equivalent a




deux
> indexes qui contiennent un champ chacun. sur le




principe
> je sais que non, mais plus precisement je voudrais




savoir
> si, dans le cas ou je ne ferais une recherche que sur




un
> seul champ, sql server va se servir quand meme de




l'indexe
> a double champs ou si il faut ajouter deux indexes
> separament pour chaque champs en plus de l'index




primaire?
>
>
> dans ce cas, pour une souplesse totale? il faudrait




que ma
> table (B) des correspondances contiennent 3 indexes.
>
> 1) 1 index de cle primaire qui contient les deux




champs
> 2) 1 index simple qui contient le champ 1
> 3) 1 index simple qui contient le champ 2
>
> est ce que l'option 1) serait suffisante pour tout ou




est
> il obligatoire de proceder ainsi?
>
>
>
>

--
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




*************************





.



Avatar
Fred Pichaut
Hello Fred,



Une bonne solution est dans un index clustered sur une colonne et un index
NC sur l'autre.



L'index NC possède les deux colonnes car un index NC = Index Key + Cluster
Key.

L'index Cluster est suffisant a une clef car il est unique.



Cdlt



Fred


"Fred BROUARD" wrote in message
news:#
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage et assurera un


parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
> il faut 2 index composés : champ1+champ2, champ2+champ1
>
> br
>
>
> "alain" wrote in message
> news:0fbd01c4a866$4ea20cb0$
>
> question sur les indexes..
>
> j'ai 2 tables de données (A et C) et une table de
> correspondances entre les deux (B)
>
> la table (B) contient juste 2 champs
> qui correspondent aux cles primaires de (A) et (C)
> et elle possede un index a deux champs.
>
> la question est la suivante:
>
> est ce qu'un index a deux champs est equivalent a deux
> indexes qui contiennent un champ chacun. sur le principe
> je sais que non, mais plus precisement je voudrais savoir
> si, dans le cas ou je ne ferais une recherche que sur un
> seul champ, sql server va se servir quand meme de l'indexe
> a double champs ou si il faut ajouter deux indexes
> separament pour chaque champs en plus de l'index primaire?
>
>
> dans ce cas, pour une souplesse totale? il faudrait que ma
> table (B) des correspondances contiennent 3 indexes.
>
> 1) 1 index de cle primaire qui contient les deux champs
> 2) 1 index simple qui contient le champ 1
> 3) 1 index simple qui contient le champ 2
>
> est ce que l'option 1) serait suffisante pour tout ou est
> il obligatoire de proceder ainsi?
>
>
>
>

--
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 *************************



Avatar
bruno reiter [MVP]
ça fait 2

br

wrote in message
news:06b701c4ab71$b8049a20$
concretement ca fait 4 indexes au lieu de 3 ca


-----Message d'origine-----
à mon avis, comme les deux cols sont PK dans d'autres


tables, les colonnes
sont de petite taille.

d'autre part comme il n'y a que deux colonnes, si on


prend comme index
col1+col2 et col2+col1, on aura toujours un index


couvrant et on pourra
toujours les utiliser de manière optimale si on a une


jointure, un tri ou
une sélection.

br

"Fred BROUARD" wrote in


message
news:#
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage




et assurera un
parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
> il faut 2 index composés : champ1+champ2,




champ2+champ1
>
> br
>
>
> "alain" wrote




in message
> news:0fbd01c4a866$4ea20cb0$
>
> question sur les indexes..
>
> j'ai 2 tables de données (A et C) et une table de
> correspondances entre les deux (B)
>
> la table (B) contient juste 2 champs
> qui correspondent aux cles primaires de (A) et (C)
> et elle possede un index a deux champs.
>
> la question est la suivante:
>
> est ce qu'un index a deux champs est equivalent a




deux
> indexes qui contiennent un champ chacun. sur le




principe
> je sais que non, mais plus precisement je voudrais




savoir
> si, dans le cas ou je ne ferais une recherche que sur




un
> seul champ, sql server va se servir quand meme de




l'indexe
> a double champs ou si il faut ajouter deux indexes
> separament pour chaque champs en plus de l'index




primaire?
>
>
> dans ce cas, pour une souplesse totale? il faudrait




que ma
> table (B) des correspondances contiennent 3 indexes.
>
> 1) 1 index de cle primaire qui contient les deux




champs
> 2) 1 index simple qui contient le champ 1
> 3) 1 index simple qui contient le champ 2
>
> est ce que l'option 1) serait suffisante pour tout ou




est
> il obligatoire de proceder ainsi?
>
>
>
>

--
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




*************************





.



Avatar
David
hello,

le débat semble faire "rage" :-) j'y ajoute mon grain ...

pour moi 1 clustered avec les 2 valeurs (qui j'imagine
forment une clé valable) col1+col2. Col2 est un peu
surperflu mais permet de tout avoir trié proprement et
accélérer les jointures)
un index nonclustered avec col2+col1 (donc index couvrant,
donc pas d'opération de bookmark dans le plan d'exec, donc
meilleure perf ... cqfd)

ainsi quelque soit l'élément qui servira de filtre dans
un "where" il y aura un seek dans 1 index et non un scan
de la table.

euh question bête : quels volumes sont en jeu ? parce que
si très peu de lignes (genre le tout tient dans qq pages
de stockage (1page = 8Ko)) la discussion n'est pas très
utile dans ce cas ;-) même si théoriquement primordiale !

David

-----Message d'origine-----
à mon avis, comme les deux cols sont PK dans d'autres


tables, les colonnes
sont de petite taille.

d'autre part comme il n'y a que deux colonnes, si on


prend comme index
col1+col2 et col2+col1, on aura toujours un index


couvrant et on pourra
toujours les utiliser de manière optimale si on a une


jointure, un tri ou
une sélection.

br

"Fred BROUARD" wrote in


message
news:#
bruno, je suis pas d'accord, il faut 3 index :
1 pour la clef primaire donc Col1 + Col2
1 pour chaquer clef étrangère : Col1 et Col2

Cela ne devrait pas donner plus de volume au stockage




et assurera un
parcous
plus rapide pour Col2

A +

bruno reiter [MVP] a écrit:
> il faut 2 index composés : champ1+champ2,




champ2+champ1
>
> br
>
>
> "alain" wrote




in message
> news:0fbd01c4a866$4ea20cb0$
>
> question sur les indexes..
>
> j'ai 2 tables de données (A et C) et une table de
> correspondances entre les deux (B)
>
> la table (B) contient juste 2 champs
> qui correspondent aux cles primaires de (A) et (C)
> et elle possede un index a deux champs.
>
> la question est la suivante:
>
> est ce qu'un index a deux champs est equivalent a




deux
> indexes qui contiennent un champ chacun. sur le




principe
> je sais que non, mais plus precisement je voudrais




savoir
> si, dans le cas ou je ne ferais une recherche que sur




un
> seul champ, sql server va se servir quand meme de




l'indexe
> a double champs ou si il faut ajouter deux indexes
> separament pour chaque champs en plus de l'index




primaire?
>
>
> dans ce cas, pour une souplesse totale? il faudrait




que ma
> table (B) des correspondances contiennent 3 indexes.
>
> 1) 1 index de cle primaire qui contient les deux




champs
> 2) 1 index simple qui contient le champ 1
> 3) 1 index simple qui contient le champ 2
>
> est ce que l'option 1) serait suffisante pour tout ou




est
> il obligatoire de proceder ainsi?
>
>
>
>

--
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




*************************





.