2010-07-07 7 views
8

In SQL, quando creo un indice di database, sono tenuti a dare l'indice di un nome, come inQual è il nome dell'indice SQL?

CREATE INDEX timestamp_index ON hit (timestamp); 

L'unica volta che questo nome sembra essere necessario è se voglio rimuovere l'indice con

DROP INDEX timestamp_index; 

Esiste un altro uso del nome dell'indice?

+0

Non è nemmeno necessario il nome dell'indice per eliminare l'indice come si potrebbe fare (se il database supporta la sintassi): hit DROP INDEX (timestamp); – Eduardo

+0

Questa domanda è simile alla mia domanda: http://stackoverflow.com/questions/3356391/why-most-sql-databases-allow-defining-the-same-index-twice – Eduardo

risposta

1

In quale altro modo si identifica l'indice?

Probabilmente è presente anche la registrazione.

+0

In quale altro modo si potrebbe identificare l'indice per cosa scopo? Se è usato solo internamente dal motore del database, non ho bisogno di dargli un nome. –

+1

Modificarlo, cancellarlo, misurarne l'efficienza –

+0

Ho avuto downvoted per aver detto la stessa cosa di tutti gli altri? –

6

A volte è necessario fare l'indicizzazione dell'indice, per cui si comunica al motore di query quale indice deve essere utilizzato. Se i tuoi indici non hanno un nome, non puoi farlo.

1

E 'anche utile durante la visualizzazione/rivedere i piani di esecuzione (almeno in SQL Server), dal momento che gli indici utilizzati sono indicati per nome.

12

Qui ci sono un paio di cose a cui pensare:

Come ti ricostruire l'indice?

Come deframmentare/riorganizzare l'indice?

come si modifica l'indice?

Come guardereste l'indice per vedere quali colonne ci sono dentro?

Durante la visualizzazione di un piano di esecuzione come sapresti quale indice è stato utilizzato?

Come si disabilita l'indice quando si esegue BULK INSERT/BCP?

Come utilizzereste il DMV sys.dm_db_missing_index_details quando non si conosce il nome?

BTW quando si crea un primary key un clustered index verrà creata per impostazione predefinita, SQL Server darà un nome per voi

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' 

Ecco il nome che ha ottenuto generato per tale indice PK__bla__3213E83F66603565

+0

Attualmente sto usando SQLite in questo momento, se questo è un interesse. –

0

Mi sento spesso allo stesso modo sui nomi dei file. Un nome file mp3 deve contenere metadati (artista, album, non è un podcast, ecc.) Quando gli attributi del file fanno un lavoro migliore? I file sul mio ipod non assomigliano ai nomi file corrispondenti sul mio disco rigido perché utilizza un indice e non mi è stato richiesto di pensare un nome per all'indice!

A differenza del nome di un elemento dati, il nome di un indice è arbitrario. L'indice ideale è quello che viene creato e per sempre più "curato" dal sistema come il sistema conosce meglio. Purtroppo, la realtà è che nelle rare occasioni potresti aver bisogno di fare qualcosa con esso (ad esempio, rilasciarlo!). È possibile fare riferimento a un dizionario di sistema per identificare l'indice in base ai relativi attributi, in genere solo le colonne che comprende.

Problemi correlati