2010-07-07 4 views
8

Dans SQL, lorsque je crée un index de base de données, je suis obligé de donner l'indice un nom, comme dansÀ quoi sert le nom d'index SQL?

CREATE INDEX timestamp_index ON hit (timestamp); 

La seule fois que ce nom semble être nécessaire est si je veux supprimer l'index avec

DROP INDEX timestamp_index; 

Y a-t-il une autre utilisation du nom d'index?

+0

Vous n'auriez même pas besoin du nom d'index pour supprimer l'index comme vous le feriez (si la base de données prenait en charge la syntaxe): DROP INDEX hit (timestamp); – Eduardo

+0

Cette question est similaire à ma question: http://stackoverflow.com/questions/3356391/why-most-sql-databases-allow-defining-the-same-index-twice – Eduardo

Répondre

1

Sinon, comment identifieriez-vous l'index?

La journalisation est probablement également associée.

+0

Sinon, comment pourriez-vous identifier l'indice de ce que objectif? Si c'est seulement utilisé en interne par le moteur de base de données, je n'ai pas besoin de lui donner un nom. –

+1

Modification, suppression et mesure de l'efficacité –

+0

J'ai été abaissé pour avoir dit la même chose que tout le monde? –

6

Parfois, il est nécessaire de faire des indices d'indice, ce qui vous permet de dire au moteur de recherche quel index il doit utiliser. Si vos index n'ont pas de nom, vous ne pouvez pas le faire.

1

Il est également utile lors de la visualisation/l'examen des plans d'exécution (au moins dans SQL Server), étant donné que les indices utilisés sont présentés par leur nom.

12

Voici quelques petites choses à penser:

Comment voulez-vous reconstruire l'index?

Comment défragmenteriez-vous/réorganiseriez-vous l'index?

comment voulez-vous modifier l'indice?

Comment regarderiez-vous l'index pour voir quelles colonnes sont dedans? Lors de l'affichage d'un plan d'exécution, comment sauriez-vous quel index a été utilisé?

Comment désactiver l'index en faisant BULK INSERT/BCP?

Comment utiliseriez-vous le sys.dm_db_missing_index_details DMV lorsque vous ne connaissez pas le nom?

BTW lorsque vous créez un primary key un clustered index sera créé par défaut, SQL Server donnera un nom pour vous

create table bla (id int primary key) 
go 

select * from sys.sysobjects s 
join sys.sysobjects s2 on s.parent_obj = s2.id 
where s2.name = 'bla' 

Voici le nom qui a obtenu généré pour cet indice PK__bla__3213E83F66603565

+0

Je suis en train d'utiliser SQLite en ce moment, si c'est un intérêt. –

0

Je ressens souvent la même chose à propos des noms de fichiers. Un nom de fichier mp3 doit-il contenir des métadonnées (artiste, album, podcast, etc.) lorsque les attributs du fichier font un meilleur travail? Les fichiers sur mon ipod ne ressemblent pas aux noms de fichiers correspondants sur mon disque dur parce qu'il utilise un index et je n'avais pas besoin de penser à un nom pour cet index!

Contrairement à un nom d'élément de données, le nom d'un index est arbitraire. L'indice idéal est celui qui est créé et toujours plus «pris en charge» par le système comme le système le sait le mieux. Malheureusement, la réalité est que sur les rares occasions, vous devrez peut-être faire quelque chose avec (par exemple, laissez tomber!). Vous pouvez vous référer à un dictionnaire système pour identifier l'index en fonction de ses attributs, généralement uniquement les colonnes qu'il comprend.