OVH Cloud OVH Cloud

Création d'un annuaire téléphonique

3 réponses
Avatar
Anonyme
Salut à tous.


Dans le cas d'un projet pour un client, je suis en train de mettre en
place un annuaire téléphonique sur un serveur SQL 2000.

La plupart des requetes porteront sur un scoring prénom et lieu (ville
et/ou codepostal)

La structure actuelle de la base est donc la suivant:

|---------------------|
| table prenoms |
|---------------------|
| Id int | <- clé primaire
| Prenom varchar(64)|
|---------------------|


|---------------------|
| table lieux |
|---------------------|
| Id int | <- clé primaire
| Ville varchar(64)|
| CP char(5) |
|---------------------|


|---------------------|
| table annuaire |
|---------------------|
| Id int | <- clé primaire
| Nom varchar(64)|
| Prenom int | <- index
| Lieu int | <- index
| Tel varchar(10)|
|---------------------|

Les requetes types sont du genre:
SELECT A.Nom, P.Prenom, L.Ville FROM annuaire A, prenoms P, lieux L
WHERE
P.Id = A.Prenom AND
P.Prenom = 'gregoire' AND
L.Id = A.Lieu AND
L.CP = '69003'


Ma question est toute bête. Sachant que la base va contenir plusieurs
milions d'enregistrements (j'ai testé avec 15 millions), comment puis-je
amélioré la rapidité de mes requetes car elle prennent actuellement
entre 10 et 60 secondes.


Merci à tous de vos réponses

3 réponses

Avatar
bruno reiter [MVP]
en mettant des index au moins pour les colonnes utilisées dans les
clauses where
et les jointures

br

Anonyme wrote in message
news:
Salut à tous.


Dans le cas d'un projet pour un client, je suis en train de mettre en
place un annuaire téléphonique sur un serveur SQL 2000.

La plupart des requetes porteront sur un scoring prénom et lieu (ville
et/ou codepostal)

La structure actuelle de la base est donc la suivant:

|---------------------|
| table prenoms |
|---------------------|
| Id int | <- clé primaire
| Prenom varchar(64)|
|---------------------|


|---------------------|
| table lieux |
|---------------------|
| Id int | <- clé primaire
| Ville varchar(64)|
| CP char(5) |
|---------------------|


|---------------------|
| table annuaire |
|---------------------|
| Id int | <- clé primaire
| Nom varchar(64)|
| Prenom int | <- index
| Lieu int | <- index
| Tel varchar(10)|
|---------------------|

Les requetes types sont du genre:
SELECT A.Nom, P.Prenom, L.Ville FROM annuaire A, prenoms P, lieux L
WHERE
P.Id = A.Prenom AND
P.Prenom = 'gregoire' AND
L.Id = A.Lieu AND
L.CP = '69003'


Ma question est toute bête. Sachant que la base va contenir plusieurs
milions d'enregistrements (j'ai testé avec 15 millions), comment puis-je
amélioré la rapidité de mes requetes car elle prennent
actuellement
entre 10 et 60 secondes.


Merci à tous de vos réponses




Avatar
chris
un jour mon prof m'a dit :
Une bonne base est une base ou tous les champs sont indéxés ...
c'est vrai que c'est plus rapide en recherche après, mais bon, ca prend
plus
de place non ?

cordialement
chris


"bruno reiter [MVP]" a
écrit dans le message
de news:
en mettant des index au moins pour les colonnes utilisées dans les
clauses



where
et les jointures

br

Anonyme wrote in
message
news:
> Salut à tous.
>
>
> Dans le cas d'un projet pour un client, je suis en train de mettre en
> place un annuaire téléphonique sur un serveur SQL 2000.
>
> La plupart des requetes porteront sur un scoring prénom et lieu
(ville
> et/ou codepostal)
>
> La structure actuelle de la base est donc la suivant:
>
> |---------------------|
> | table prenoms |
> |---------------------|
> | Id int | <- clé primaire
> | Prenom varchar(64)|
> |---------------------|
>
>
> |---------------------|
> | table lieux |
> |---------------------|
> | Id int | <- clé primaire
> | Ville varchar(64)|
> | CP char(5) |
> |---------------------|
>
>
> |---------------------|
> | table annuaire |
> |---------------------|
> | Id int | <- clé primaire
> | Nom varchar(64)|
> | Prenom int | <- index
> | Lieu int | <- index
> | Tel varchar(10)|
> |---------------------|
>
> Les requetes types sont du genre:
> SELECT A.Nom, P.Prenom, L.Ville FROM annuaire A, prenoms P, lieux L
> WHERE
> P.Id = A.Prenom AND
> P.Prenom = 'gregoire' AND
> L.Id = A.Lieu AND
> L.CP = '69003'
>
>
> Ma question est toute bête. Sachant que la base va contenir
plusieurs
> milions d'enregistrements (j'ai testé avec 15 millions), comment
puis-je
> amélioré la rapidité de mes requetes car elle
prennent actuellement
> entre 10 et 60 secondes.
>
>
> Merci à tous de vos réponses
>


Avatar
bruno reiter [MVP]
Je pense qu'il y avait un contexte ;-)

les index sont bons en lecture, ils sont couteux en écriture.

donc une bonne base OLAP est très indexée, une bonne base OLTP est peu indexée.

et comme souvent une base est d'usage mixte, il faut des compromis, heureusement
pour nous, on vit de ça ;-)

br

"chris" wrote in message
news:3fe3be44$0$1177$
un jour mon prof m'a dit :
Une bonne base est une base ou tous les champs sont indéxés ...
c'est vrai que c'est plus rapide en recherche après, mais bon, ca prend plus
de place non ?

cordialement
chris


"bruno reiter [MVP]" a écrit dans le message
de news:
> en mettant des index au moins pour les colonnes utilisées dans les clauses
where
> et les jointures
>
> br
>
> "Grégoire PAILLER" wrote in message
> news:
> > Salut à tous.
> >
> >
> > Dans le cas d'un projet pour un client, je suis en train de mettre en
> > place un annuaire téléphonique sur un serveur SQL 2000.
> >
> > La plupart des requetes porteront sur un scoring prénom et lieu (ville
> > et/ou codepostal)
> >
> > La structure actuelle de la base est donc la suivant:
> >
> > |---------------------|
> > | table prenoms |
> > |---------------------|
> > | Id int | <- clé primaire
> > | Prenom varchar(64)|
> > |---------------------|
> >
> >
> > |---------------------|
> > | table lieux |
> > |---------------------|
> > | Id int | <- clé primaire
> > | Ville varchar(64)|
> > | CP char(5) |
> > |---------------------|
> >
> >
> > |---------------------|
> > | table annuaire |
> > |---------------------|
> > | Id int | <- clé primaire
> > | Nom varchar(64)|
> > | Prenom int | <- index
> > | Lieu int | <- index
> > | Tel varchar(10)|
> > |---------------------|
> >
> > Les requetes types sont du genre:
> > SELECT A.Nom, P.Prenom, L.Ville FROM annuaire A, prenoms P, lieux L
> > WHERE
> > P.Id = A.Prenom AND
> > P.Prenom = 'gregoire' AND
> > L.Id = A.Lieu AND
> > L.CP = '69003'
> >
> >
> > Ma question est toute bête. Sachant que la base va contenir plusieurs
> > milions d'enregistrements (j'ai testé avec 15 millions), comment puis-je
> > amélioré la rapidité de mes requetes car elle prennent actuellement
> > entre 10 et 60 secondes.
> >
> >
> > Merci à tous de vos réponses
> >
> >
> >
> > --
> > Grégoire PAILLER
> > AllCore - Dirigeant
> >
> > (enlever 2 des 3 tirets pour m'écrire)
>
>