[SQL Server] Plusieurs index du même nom

Plusieurs index du même nom [SQL Server] - SQL/NoSQL - Programmation

Marsh Posté le 06-01-2006 à 09:37:29    

Bonjour,
 
J'ai une question sur la gestion des index par SQL Server 2000.
 
Périodiquement, on historise par roulement X tables sur Y jours/mois... La plupart de ces tables sont indexées.
 
Exemple :  
- table Tab indexée par KTab
- historisation du dernier mois : table HTabM1, indexée par KHTabM1 (M1 = mois moins 1)
 
Au mois suivant, on renomme HTabM1 en HTabM2 et on crée HTabM1 à partir de Tab. On se demande donc ce qu'il en est des index.
 
On voit dans SQL Server :
- table Tab indexée par KTab
- table HTabM1, indexée par KHTabM1
- table HTabM2, indexée par KHTabM1
 
Si je dis pas de connerie, un index est lié à une table et non à une base et on peut avoir plusieurs index du même nom (KHTabM1 ici).
 
J'aimerai savoir si ça peut poser problème. On a donc 3 solutions :
1) Laisser comme ça pis on vera ben (appelée solution "porcinet" )
2) Au moins renommer KHTabM1 en KHTabMx pour la table HTabMx (appelée solution "plus propre mais pas trop différente" )
3) Supprimer l'index KHTabM1 quand on renomme la table et le recréer (appelée solution "plus propre et ptet plus efficace ??" )
 
Vous en pensez quoi au niveau :
- principe
- propreté
- efficacité
- rendement (cf. le temps "perdu" a recréer tous les index dans le cas de la solution 3 par exemple)
 
Merci :)

Reply

Marsh Posté le 06-01-2006 à 09:37:29   

Reply

Marsh Posté le 06-01-2006 à 10:57:33    

Je pense qu'en fait, SQL Server génère un nouvel index avec un nom style :
 
KHTabM1_325464577854573658678 (ça il aime bien faire)
Puis il n'affiche que ça.
 
C'est ce qu'il se passe avec certains objets quand on les crée sans les nommer, il met un nom bidon, et ajoute une série de chiffres qu'il n'affiche pas afin d'assurer l'unicité.
 
Le meilleur moyen, c'est d'aller dans Entreprise Manager, et fait l'exporation des stables et index en SQL (structure seulement) et regarder le script.

Reply

Marsh Posté le 06-01-2006 à 11:38:54    

Merci pour ta réponse. Après vérification, je ne trouve que des KHTabM1. J'ai ptet mal cherché mais je n'ai pas vu de KHTabM1_325464577854573658678...
 
Finalement on part sur la solution 3 qui semble de loin la meilleure.

Reply

Marsh Posté le 06-01-2006 à 12:17:24    

Tu fais comment pour dupliquer une table et recopier ses index avec ?
 

Code :
  1. create table t1 (id numeric not null, val varchar(20))
  2. go
  3. create unique clustered index uix_pk1 on t1 (id)
  4. go
  5. create table t2 (id numeric not null, val varchar(20))
  6. go
  7. create unique clustered index uix_pk1 on t2 (id)
  8. go
  9. select * into t3 from t1
  10. go


t2 a bien un index du même nom que celui de t1, mais t3 n'a pas d'index...
 
sinon, vérifié :

Code :
  1. drop index t2.uix_pk1
  2. go


=> Supprime l'index "uix_pk1" de la table "t2" sans toucher à celui de "t1", ce sont donc bien deux index différents.
 
Et pour finir, en effet, les index sont bel et bien totalement différentes et gérés par table :

Code :
  1. select tb.name tbName, ix.name ixName
  2. from sysobjects tb, sysindexes ix
  3. where ix.name = 'uix_pk1'
  4. and tb.type = 'U'
  5. and tb.id = ix.id
  6. go


=> Retour :


t1 uix_pk1
t2 uix_pk1

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed