OVH Cloud OVH Cloud

Gestion des index

4 réponses
Avatar
Thierry
bonsoir,

lorsque dans une table il y a plusieurs champs sur lesquelles des
applications clientes font souvent des recherches, quelle méthodologie faut
il
appliquer ?
Par exemple supposons que la table fait plusieurs centaines de milliers
d'enregistrements et que des recherches sont souvent effectuées
sur les champs suivants :

champ1 de type entier
un select count(distinct) de ce champ renvoit 3
champ2 de type entier
un select count(distinct) de ce champ renvoit 300
champ3 de type texte de 5 caractères
un select count(distinct) de ce champ renvoit 10
champ4 de type texte de 30 caractères
un select count(distinct) de ce champ renvoit 5
et enfin
un champ5 de type entier
un select distinct(count) de ce champ renvoit 20

Quels champs faut il indexer en priorité ?
Y a t'il un ordre à respecter ?
Faut il utiliser des index en cluster et des index non clusterisés ?

Merci d'avance pour votre aide.
Srmt
thierry

4 réponses

Avatar
lionelp
Bonjour,

pour l'accès à l'enregistrement : plutôt index clusterisé
pour l'accès à la clé d'un enregistrement : plutôt index non clusterisé
Si l'index est multi colonne : déclarer la colonne la plus discriminente en
premier

pour illustrer ton exemple :
select champ1, champ2, champ3, champ4, champ5
from table
where champ1 = val1
and champ1 = val2
and champ1 = val3
and champ1 = val4
and champ5 = val5
group by champ1, champ2, champ3, champ4, champ5
ou
select champ1, champ2, champ3, champ4, champ5
from table
group by champ1, champ2, champ3, champ4, champ5
==> index non cluster sur champ2, champ3, champ5, champ4, champ1

dans ce cas tu ne balaies que l'index, la colonne la plus discriminente est
en premier donc peu ou pas de balayage de l'index

select champ1, champ2, champ3, champ4, champ5, max(champ6),
sum(champ7+champ8)
from table
where champ1 = val1
and champ1 = val2
and champ1 = val3
and champ1 = val4
and champ5 = val5
group by champ1, champ2, champ3, champ4, champ5
ou
select champ1, champ2, champ3, champ4, champ5, max(champ6),
sum(champ7+champ8)
from table
group by champ1, champ2, champ3, champ4, champ5
==> index cluster sur champ2, champ3, champ5, champ4, champ1
dans ce cas tu es obligé de balayer les données donc l'index clusterisé est
indiqué, le nombre d'IO sera relativement faible, on conserve le principe
colonne la plus discriminente en premier (dans l'index) pour plus de
séléctivité.


Cordialement,
LionelP


"Thierry" wrote in message
news:3fff202e$0$17135$
bonsoir,

lorsque dans une table il y a plusieurs champs sur lesquelles des
applications clientes font souvent des recherches, quelle méthodologie


faut
il
appliquer ?
Par exemple supposons que la table fait plusieurs centaines de milliers
d'enregistrements et que des recherches sont souvent effectuées
sur les champs suivants :

champ1 de type entier
un select count(distinct) de ce champ renvoit 3
champ2 de type entier
un select count(distinct) de ce champ renvoit 300
champ3 de type texte de 5 caractères
un select count(distinct) de ce champ renvoit 10
champ4 de type texte de 30 caractères
un select count(distinct) de ce champ renvoit 5
et enfin
un champ5 de type entier
un select distinct(count) de ce champ renvoit 20

Quels champs faut il indexer en priorité ?
Y a t'il un ordre à respecter ?
Faut il utiliser des index en cluster et des index non clusterisés ?

Merci d'avance pour votre aide.
Srmt
thierry




Avatar
Thierry
merci pour ces explications.
Aurais tu des liens à me conseiller pour approfondir ces notions ?

merci d'avance.
srmt
thierry

"lionelp" a écrit dans le message de
news:40027fd2$
Bonjour,

pour l'accès à l'enregistrement : plutôt index clusterisé
pour l'accès à la clé d'un enregistrement : plutôt index non clusterisé
Si l'index est multi colonne : déclarer la colonne la plus discriminente


en
premier

pour illustrer ton exemple :
select champ1, champ2, champ3, champ4, champ5
from table
where champ1 = val1
and champ1 = val2
and champ1 = val3
and champ1 = val4
and champ5 = val5
group by champ1, champ2, champ3, champ4, champ5
ou
select champ1, champ2, champ3, champ4, champ5
from table
group by champ1, champ2, champ3, champ4, champ5
==> index non cluster sur champ2, champ3, champ5, champ4, champ1

dans ce cas tu ne balaies que l'index, la colonne la plus discriminente


est
en premier donc peu ou pas de balayage de l'index

select champ1, champ2, champ3, champ4, champ5, max(champ6),
sum(champ7+champ8)
from table
where champ1 = val1
and champ1 = val2
and champ1 = val3
and champ1 = val4
and champ5 = val5
group by champ1, champ2, champ3, champ4, champ5
ou
select champ1, champ2, champ3, champ4, champ5, max(champ6),
sum(champ7+champ8)
from table
group by champ1, champ2, champ3, champ4, champ5
==> index cluster sur champ2, champ3, champ5, champ4, champ1
dans ce cas tu es obligé de balayer les données donc l'index clusterisé


est
indiqué, le nombre d'IO sera relativement faible, on conserve le principe
colonne la plus discriminente en premier (dans l'index) pour plus de
séléctivité.


Cordialement,
LionelP


"Thierry" wrote in message
news:3fff202e$0$17135$
> bonsoir,
>
> lorsque dans une table il y a plusieurs champs sur lesquelles des
> applications clientes font souvent des recherches, quelle méthodologie
faut
> il
> appliquer ?
> Par exemple supposons que la table fait plusieurs centaines de milliers
> d'enregistrements et que des recherches sont souvent effectuées
> sur les champs suivants :
>
> champ1 de type entier
> un select count(distinct) de ce champ renvoit 3
> champ2 de type entier
> un select count(distinct) de ce champ renvoit 300
> champ3 de type texte de 5 caractères
> un select count(distinct) de ce champ renvoit 10
> champ4 de type texte de 30 caractères
> un select count(distinct) de ce champ renvoit 5
> et enfin
> un champ5 de type entier
> un select distinct(count) de ce champ renvoit 20
>
> Quels champs faut il indexer en priorité ?
> Y a t'il un ordre à respecter ?
> Faut il utiliser des index en cluster et des index non clusterisés ?
>
> Merci d'avance pour votre aide.
> Srmt
> thierry
>
>




Avatar
lionelp
Bonjour,

Il y a le lien suivant qui est un bon point de départ :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_05_30s5.asp

Cordialement,
LionelP

"Thierry" wrote in message
news:4002c3e1$0$17131$
merci pour ces explications.
Aurais tu des liens à me conseiller pour approfondir ces notions ?

merci d'avance.
srmt
thierry

"lionelp" a écrit dans le message de
news:40027fd2$
> Bonjour,
>
> pour l'accès à l'enregistrement : plutôt index clusterisé
> pour l'accès à la clé d'un enregistrement : plutôt index non clusterisé
> Si l'index est multi colonne : déclarer la colonne la plus discriminente
en
> premier
>
> pour illustrer ton exemple :
> select champ1, champ2, champ3, champ4, champ5
> from table
> where champ1 = val1
> and champ1 = val2
> and champ1 = val3
> and champ1 = val4
> and champ5 = val5
> group by champ1, champ2, champ3, champ4, champ5
> ou
> select champ1, champ2, champ3, champ4, champ5
> from table
> group by champ1, champ2, champ3, champ4, champ5
> ==> index non cluster sur champ2, champ3, champ5, champ4, champ1
>
> dans ce cas tu ne balaies que l'index, la colonne la plus discriminente
est
> en premier donc peu ou pas de balayage de l'index
>
> select champ1, champ2, champ3, champ4, champ5, max(champ6),
> sum(champ7+champ8)
> from table
> where champ1 = val1
> and champ1 = val2
> and champ1 = val3
> and champ1 = val4
> and champ5 = val5
> group by champ1, champ2, champ3, champ4, champ5
> ou
> select champ1, champ2, champ3, champ4, champ5, max(champ6),
> sum(champ7+champ8)
> from table
> group by champ1, champ2, champ3, champ4, champ5
> ==> index cluster sur champ2, champ3, champ5, champ4, champ1
> dans ce cas tu es obligé de balayer les données donc l'index clusterisé
est
> indiqué, le nombre d'IO sera relativement faible, on conserve le


principe
> colonne la plus discriminente en premier (dans l'index) pour plus de
> séléctivité.
>
>
> Cordialement,
> LionelP
>
>
> "Thierry" wrote in message
> news:3fff202e$0$17135$
> > bonsoir,
> >
> > lorsque dans une table il y a plusieurs champs sur lesquelles des
> > applications clientes font souvent des recherches, quelle méthodologie
> faut
> > il
> > appliquer ?
> > Par exemple supposons que la table fait plusieurs centaines de


milliers
> > d'enregistrements et que des recherches sont souvent effectuées
> > sur les champs suivants :
> >
> > champ1 de type entier
> > un select count(distinct) de ce champ renvoit 3
> > champ2 de type entier
> > un select count(distinct) de ce champ renvoit 300
> > champ3 de type texte de 5 caractères
> > un select count(distinct) de ce champ renvoit 10
> > champ4 de type texte de 30 caractères
> > un select count(distinct) de ce champ renvoit 5
> > et enfin
> > un champ5 de type entier
> > un select distinct(count) de ce champ renvoit 20
> >
> > Quels champs faut il indexer en priorité ?
> > Y a t'il un ordre à respecter ?
> > Faut il utiliser des index en cluster et des index non clusterisés ?
> >
> > Merci d'avance pour votre aide.
> > Srmt
> > thierry
> >
> >
>
>




Avatar
Thierry
merci cette page correspond à celle que l'on retrouve dans l'aide de
sqlserver
par contre ces pages là , je ne les ai pas trouvé dans l'aide et ce sont
celles qui m'interessent :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_05_2ri0.asp

tu disais point de départ , cela signifie t'il que tu connais d'autres
ressources ?

srmt
thierry


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

Il y a le lien suivant qui est un bon point de départ :



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_05_30s5.asp

Cordialement,
LionelP

"Thierry" wrote in message
news:4002c3e1$0$17131$
> merci pour ces explications.
> Aurais tu des liens à me conseiller pour approfondir ces notions ?
>
> merci d'avance.
> srmt
> thierry
>
> "lionelp" a écrit dans le message de
> news:40027fd2$
> > Bonjour,
> >
> > pour l'accès à l'enregistrement : plutôt index clusterisé
> > pour l'accès à la clé d'un enregistrement : plutôt index non


clusterisé
> > Si l'index est multi colonne : déclarer la colonne la plus


discriminente
> en
> > premier
> >
> > pour illustrer ton exemple :
> > select champ1, champ2, champ3, champ4, champ5
> > from table
> > where champ1 = val1
> > and champ1 = val2
> > and champ1 = val3
> > and champ1 = val4
> > and champ5 = val5
> > group by champ1, champ2, champ3, champ4, champ5
> > ou
> > select champ1, champ2, champ3, champ4, champ5
> > from table
> > group by champ1, champ2, champ3, champ4, champ5
> > ==> index non cluster sur champ2, champ3, champ5, champ4, champ1
> >
> > dans ce cas tu ne balaies que l'index, la colonne la plus


discriminente
> est
> > en premier donc peu ou pas de balayage de l'index
> >
> > select champ1, champ2, champ3, champ4, champ5, max(champ6),
> > sum(champ7+champ8)
> > from table
> > where champ1 = val1
> > and champ1 = val2
> > and champ1 = val3
> > and champ1 = val4
> > and champ5 = val5
> > group by champ1, champ2, champ3, champ4, champ5
> > ou
> > select champ1, champ2, champ3, champ4, champ5, max(champ6),
> > sum(champ7+champ8)
> > from table
> > group by champ1, champ2, champ3, champ4, champ5
> > ==> index cluster sur champ2, champ3, champ5, champ4, champ1
> > dans ce cas tu es obligé de balayer les données donc l'index


clusterisé
> est
> > indiqué, le nombre d'IO sera relativement faible, on conserve le
principe
> > colonne la plus discriminente en premier (dans l'index) pour plus de
> > séléctivité.
> >
> >
> > Cordialement,
> > LionelP
> >
> >
> > "Thierry" wrote in message
> > news:3fff202e$0$17135$
> > > bonsoir,
> > >
> > > lorsque dans une table il y a plusieurs champs sur lesquelles des
> > > applications clientes font souvent des recherches, quelle


méthodologie
> > faut
> > > il
> > > appliquer ?
> > > Par exemple supposons que la table fait plusieurs centaines de
milliers
> > > d'enregistrements et que des recherches sont souvent effectuées
> > > sur les champs suivants :
> > >
> > > champ1 de type entier
> > > un select count(distinct) de ce champ renvoit 3
> > > champ2 de type entier
> > > un select count(distinct) de ce champ renvoit 300
> > > champ3 de type texte de 5 caractères
> > > un select count(distinct) de ce champ renvoit 10
> > > champ4 de type texte de 30 caractères
> > > un select count(distinct) de ce champ renvoit 5
> > > et enfin
> > > un champ5 de type entier
> > > un select distinct(count) de ce champ renvoit 20
> > >
> > > Quels champs faut il indexer en priorité ?
> > > Y a t'il un ordre à respecter ?
> > > Faut il utiliser des index en cluster et des index non clusterisés ?
> > >
> > > Merci d'avance pour votre aide.
> > > Srmt
> > > thierry
> > >
> > >
> >
> >
>
>