OVH Cloud OVH Cloud

Groupe de fichiers pour la PK

2 réponses
Avatar
Timur
Bonjour,

je viens d'un autre SGBD, et j'avais l'habitude de toujours séparer dans des
fichiers différents (et sur des disques différents) les DATA des INDEX.


J'ai vu que sous SQL 2K, on pouvait faire la même chose via les groupes de
fichiers. Pas de problème pour les index, mais concernant la clé primaire
(ou en tout cas toute clé CLUSTERED), je ne peux que spécifier le groupe de
fichier correspondant aux données de la table.
J'ai bien compris qu'en cas de clé CLUSTERED, ce sont directement les
données qui sont triées, mais SQL stocke bien quelque-part un B-TREE
indexant les pages.

On ne peut donc pas préciser un groupe de fichiers pour ce B-TREE ?



Merci de vos éclaircissements.


--
Cordialement

2 réponses

Avatar
Fred BROUARD
Bonjour,

Un index CLUSTER comprend toutes les données de la table. C'est donc "la table".
Dans le cas d'un index cluster, le B-TREE contient donc les données de toutes
les colonnes de la table (la ligne complète).
Mettre tous les index, y compris les cluster sur un fichier n'a pas d'intérêt.
Il convient donc de mettre tous les index non clustered (en "heap") sur le
fichier d'index et les tables ou les index cluster sur le fichier de données.

La bonne question en supplément est de se demander si l'on a toujours intérêt à
utiliser un index CLUSTER pour toute les clefs de toutes les tables (paramétrage
par défaut).
En fait le cluster n'a d'intérêt que si la clef est ordonné dans le temps =>
clef historisation ou auto incrément. Dans tous les autres cas, se poser la
question.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

Timur a écrit:
Bonjour,

je viens d'un autre SGBD, et j'avais l'habitude de toujours séparer dans des
fichiers différents (et sur des disques différents) les DATA des INDEX.


J'ai vu que sous SQL 2K, on pouvait faire la même chose via les groupes de
fichiers. Pas de problème pour les index, mais concernant la clé primaire
(ou en tout cas toute clé CLUSTERED), je ne peux que spécifier le groupe de
fichier correspondant aux données de la table.
J'ai bien compris qu'en cas de clé CLUSTERED, ce sont directement les
données qui sont triées, mais SQL stocke bien quelque-part un B-TREE
indexant les pages.

On ne peut donc pas préciser un groupe de fichiers pour ce B-TREE ?



Merci de vos éclaircissements.




Avatar
Timur
Merci Fred pour ces précisions.

je comprend tout à fait que les *feuilles* du BTREE soient la table
elle-même. Mais il y a bien quand même des niveau supérieurs d'index qui
pointent vers ces feuilles, non ?

Encore plus bizarre : Enterprise Manager ne permet pas (zone grisée) de
sélectionner d'autre groupes que le groupe des données de la table.
Par contre, avec le script suivant :


CREATE TABLE dbo.TBLSTRUCTURE
(
ID int NOT NULL IDENTITY (1, 1),
valeur varchar(200) NULL
) ON GrpStructure_data
GO

ALTER TABLE dbo.TBLSTRUCTURE
ADD CONSTRAINT PK_TBLSTRUCTURE PRIMARY KEY CLUSTERED
(
ID
) ON GrpStructure_ind


on parvient à créer sans erreur la PK CLUSTERED dans un autre groupe que
celui de la table.

Après vérification dans sysindexes, la PK est bien dans le groupe
GrpStructure_ind !

Alors on peut, ou on peut pas ??? ;-)


Sinon, bien noté sur la pertinence de la clé clustered. J'en suis aux "cas
d'école" pour retrouver mes marques par rapport à mon expérience.


--
Cordialement


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

Un index CLUSTER comprend toutes les données de la table. C'est donc "la


table".
Dans le cas d'un index cluster, le B-TREE contient donc les données de


toutes
les colonnes de la table (la ligne complète).
Mettre tous les index, y compris les cluster sur un fichier n'a pas


d'intérêt.
Il convient donc de mettre tous les index non clustered (en "heap") sur le
fichier d'index et les tables ou les index cluster sur le fichier de


données.

La bonne question en supplément est de se demander si l'on a toujours


intérêt à
utiliser un index CLUSTER pour toute les clefs de toutes les tables


(paramétrage
par défaut).
En fait le cluster n'a d'intérêt que si la clef est ordonné dans le temps


=>
clef historisation ou auto incrément. Dans tous les autres cas, se poser


la
question.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

Timur a écrit:
> Bonjour,
>
> je viens d'un autre SGBD, et j'avais l'habitude de toujours séparer dans


des
> fichiers différents (et sur des disques différents) les DATA des INDEX.
>
>
> J'ai vu que sous SQL 2K, on pouvait faire la même chose via les groupes


de
> fichiers. Pas de problème pour les index, mais concernant la clé


primaire
> (ou en tout cas toute clé CLUSTERED), je ne peux que spécifier le groupe


de
> fichier correspondant aux données de la table.
> J'ai bien compris qu'en cas de clé CLUSTERED, ce sont directement les
> données qui sont triées, mais SQL stocke bien quelque-part un B-TREE
> indexant les pages.
>
> On ne peut donc pas préciser un groupe de fichiers pour ce B-TREE ?
>
>
>
> Merci de vos éclaircissements.
>
>