Database
 sql >> Database >  >> RDS >> Database

Rinominare gli indici con sp_rename Procedura

Non molto tempo fa stavo lavorando a un progetto in cui dovevamo cambiare il tipo di dati di una tabella. La tabella aveva milioni di righe e abbiamo deciso di creare una tabella separata utilizzando la definizione di tabella esistente e inserire le righe in quella tabella. Dopo aver esportato i dati nella nuova tabella, abbiamo rinominato la vecchia tabella, il vincolo e gli indici utilizzando sp_rename procedura memorizzata.

L'articolo corrente è dedicato ai modi di rinominare gli indici.

Le basi della procedura memorizzata sp_rename

Possiamo rinominare l'indice con uno dei seguenti metodi:

  1. Utilizzo di SQL Server Management Studio.
  2. Utilizzo di sp_rename procedura memorizzata.

Per prima cosa, cerchiamo di capire le basi.

sp_rename viene utilizzata per rinominare tabelle, colonne di tabelle, nomi di indici e tipi definiti dall'utente di Common Language Runtime.

La sintassi della procedura è la seguente:

Exec sp_rename 'nome_oggetto', 'nuovo_nome', 'tipo_oggetto'

  1. nome_oggetto specifica il nome dell'oggetto che si desidera rinominare.
    1. Se stai rinominando la tabella, il formato del nome_oggetto il parametro può essere [table_name] o [nome_schema].[nome_tabella] .
    2. Se stai rinominando il nome della colonna della tabella, il formato del nome_oggetto il parametro dovrebbe essere [nome_tabella].[nome_colonna].
    3. Se stai rinominando il nome dell'indice della tabella, il formato del nome_oggetto il parametro dovrebbe essere [nome_schema].[nome_tabella].[nome_indice] . Oppure può essere [nome_tabella].[nome_indice] .

Nota: Se stai utilizzando un nome oggetto completo, devi specificare le virgolette.

  1. nuovo_nome specifica il nuovo nome dell'oggetto che deve essere l'identificatore di una parte.
  2. tipo_oggetto specifica il tipo di oggetto che si desidera rinominare (un parametro facoltativo). Il valore di object_type dovrebbe essere uno dei seguenti:
    1. COLONNA
    2. BANCA DATI
    3. INDICE
    4. OGGETTO
    5. STATISTICHE

Configurazione demo

Per la nostra spiegazione e scopi di prova, ho preparato una configurazione demo. C'è il database chiamato StudentDB , dove ho creato una tabella denominata tblStudent .

La query per creare il database:

Create database [StudentDB]

La query per creare la tabella:

USE [StudentDB]
GO
CREATE TABLE [dbo].[tblStudents](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[student_name] [varchar](250) NOT NULL,
	[student_code] [varchar](5) NOT NULL,
	[student_grade] [char](2) NOT NULL,
	[SchoolID] [int] NOT NULL,
 CONSTRAINT [PK_tblStudent] PRIMARY KEY CLUSTERED([ID] ASC))

Ho anche creato l'indice denominato INDX_tblStudents_Std_Code su tblStudent tabella:

USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)

La seguente query inserisce i dati nella tabella:

insert into [tblStudents]
(student_name,student_code,student_grade,SchoolID)
values
('Nisarg Upadhyay','ST001','A',1),
('Dixit Upadhyay','ST003','A',1),
('Bharti Upadhyay','ST004','C',2),
('Nimesh Patel','ST005','C',2),
('Raghav Dave','ST006','A',1)

Ora, vediamo come rinominiamo il PK_tblStudent indicizzare utilizzando SQL Server Management Studio.

Rinomina gli indici utilizzando SSMS

Innanzitutto, rinominiamo il PK_tblStudent indice.

  1. Avvia SQL Server Management Studio e connettiti al motore di database.
  2. Espandi il StudentDB database> Tabelle > tblStudents > Indici
  3. Fai clic con il pulsante destro del mouse su PK_tblStudent indice> seleziona Rinomina dal menu o fare clic una volta sul nome dell'indice.

L'indice diventa modificabile. Specifica il nuovo nome dell'indice e premi Invio .

Prima di modificare il nome dell'indice, SSMS mostrerà il seguente avviso. Fai clic su .

Il nome dell'indice è stato modificato e le modifiche vengono applicate immediatamente.

Se il nome dell'indice non è aggiornato, aggiorna gli Indici cartella:

Eseguire la query seguente per verificare che l'indice sia stato rinominato:

select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

L'output :

Come puoi vedere, il nome dell'indice è stato modificato e SSMS si è dimostrato efficiente per questo scopo.

Ora, cerchiamo di capire come possiamo rinominare l'indice usando sp_rename procedura memorizzata.

Rinominare gli indici utilizzando la procedura memorizzata sp_rename

Rinomineremo l'indice denominato INDX_tblStudents_Std_Code a INDX_tblStudents_Student_Code .

Il nostro sp_rename stored procedure funzionerà nel codice seguente:

exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'

Esegui la query per verificare la ridenominazione dell'indice:

select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

L'output:

Note importanti

Sicurezza e autorizzazione

Per rinominare l'indice, devi avere ALTER autorizzazione sull'indice.

Come cambiano le statistiche

Quando rinominiamo l'indice, le statistiche associate all'indice vengono rinominate automaticamente. Vediamo le statistiche associate alla Chiave Primaria.

Apri SQL Server Management Studio> Espandi il database necessario> tabella tblStudents> Statistiche

Come puoi vedere, le statistiche sono state rinominate.

Come cambia il piano di esecuzione delle query

Quando rinominiamo l'indice, i metadati del piano di esecuzione della query vengono modificati in modo troppo automatico. Per renderlo più chiaro, esaminiamo il piano di esecuzione della query utilizzando PK_tblStudent indice.

Esegui la seguente istruzione SELECT:

Select * from [tblStudents] where ID=’5’

L'output:

Il nome dell'indice viene modificato nel piano di esecuzione.

Riepilogo

Pertanto, abbiamo appreso di sp_rename sintassi e utilizzo della procedura memorizzata. Inoltre, abbiamo identificato e provato due modi per rinominare gli indici sulla tabella. Ora possiamo farlo sia con SSMS che con la stored procedure dedicata. Abbiamo anche chiarito l'impatto della modifica dei nomi degli indici sulle statistiche e sui piani di esecuzione delle query. Inoltre, è possibile trovare e risolvere i problemi di frammentazione dell'indice con l'aiuto di dbForge Index Manager. Spero che questo articolo con i suoi consigli pratici si riveli utile per il tuo lavoro.

Articoli correlati

Diversi modi per rinominare le tabelle di SQL Server