Database
 sql >> Base de Dados >  >> RDS >> Database

Renomeando índices com procedimento sp_rename


Não muito tempo atrás, eu estava trabalhando em um projeto em que precisávamos alterar o tipo de dados de uma tabela. A tabela tinha milhões de linhas e decidimos criar uma tabela separada usando a definição de tabela existente e inserir as linhas nessa tabela. Após exportar os dados para a nova tabela, renomeamos a tabela, a restrição e os índices antigos usando o sp_rename procedimento armazenado.

O artigo atual é dedicado às formas de renomear índices.

Noções básicas do procedimento armazenado sp_rename


Podemos renomear o índice com um dos seguintes métodos:
  1. Usando o SQL Server Management Studio.
  2. Usando o sp_rename procedimento armazenado.

Primeiro, vamos entender o básico.

O sp_rename O procedimento é usado para renomear tabelas, colunas de tabela, nomes de índice e tipos definidos pelo usuário do Common Language Runtime.

A sintaxe do procedimento é a seguinte:

Exec sp_rename 'object_name', 'new_name', 'object_type'
  1. object_name especifica o nome do objeto que você deseja renomear.
    1. Se você estiver renomeando a tabela, o formato do object_name parâmetro pode ser [table_name] ou [schema_name].[table_name] .
    2. Se você estiver renomeando o nome da coluna da tabela, o formato do object_name o parâmetro deve ser [table_name].[column_name].
    3. Se você estiver renomeando o nome do índice da tabela, o formato do object_name o parâmetro deve ser [schema_name].[table_name].[index_name] . Ou pode ser [table_name].[index_name] .

Observação: Se você estiver usando um nome de objeto qualificado, deverá especificar as aspas.
  1. novo_nome especifica o novo nome do objeto que deve ser o identificador de uma parte.
  2. object_type especifica o tipo de objeto que você deseja renomear (um parâmetro opcional). O valor do object_type deve ser qualquer um dos seguintes:
    1. COLUNA
    2. BANCO DE DADOS
    3. ÍNDICE
    4. OBJETO
    5. ESTATÍSTICAS

Configuração de demonstração


Para nossa explicação e propósitos de teste, preparei uma configuração de demonstração. Existe o banco de dados chamado StudentDB , onde criei uma tabela chamada tblStudent .

A consulta para criar o banco de dados:
Create database [StudentDB]

A consulta para criar a tabela:
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))

Eu também criei o índice chamado INDX_tblStudents_Std_Code no tblStudent tabela:
USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)

A consulta a seguir insere os dados na tabela:
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)

Agora, vamos ver como renomeamos o PK_tblStudent index usando o SQL Server Management Studio.

Renomear índices usando SSMS


Primeiro, vamos renomear o PK_tblStudent índice.
  1. Inicie o SQL Server Management Studio e conecte-se ao mecanismo de banco de dados.
  2. Expandir o StudentDB banco de dados> Tabelas > tblAlunos > Índices
  3. Clique com o botão direito do mouse no PK_tblStudent índice> selecione Renomear no menu ou clique uma vez no nome do índice.

O índice torna-se editável. Especifique o novo nome do índice e pressione Enter .

Antes de alterar o nome do índice, o SSMS mostrará o seguinte aviso. Clique em Sim .

O nome do índice foi alterado e as alterações são aplicadas imediatamente.

Se o nome do índice não for atualizado, atualize os Índices pasta:

Execute a seguinte consulta para verificar se o índice foi renomeado:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

A saída :

Como você pode ver, o nome do índice foi alterado e o SSMS se mostrou eficiente para essa finalidade.

Agora, vamos entender como podemos renomear o índice usando o sp_rename procedimento armazenado.

Renomeie índices usando o procedimento armazenado sp_rename


Vamos renomear o índice com o nome INDX_tblStudents_Std_Code para INDX_tblStudents_Student_Code .

Nosso sp_rename procedimento armazenado funcionará no seguinte código:
exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'

Execute a consulta para verificar a renomeação do índice:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

A saída:

Observações importantes


Segurança e permissão

Para renomear o índice, você deve ter ALTER permissão no índice.

Como as estatísticas mudam

Quando renomeamos o índice, as estatísticas associadas ao índice são renomeadas automaticamente. Vamos ver as estatísticas associadas à Chave Primária.

Abra o SQL Server Management Studio> Expanda o banco de dados necessário> tabela tblStudents> Estatísticas

Como você pode ver, as estatísticas foram renomeadas.

Como o plano de execução da consulta muda

Quando renomeamos o índice, os metadados do plano de execução da consulta são alterados automaticamente. Para deixar mais claro, vamos revisar o plano de execução da consulta usando o PK_tblStudent índice.

Execute a seguinte instrução SELECT:
Select * from [tblStudents] where ID=’5’

A saída:

O nome do índice é alterado no plano de execução.

Resumo


Portanto, aprendemos sobre o sp_rename sintaxe e uso do procedimento armazenado. Além disso, identificamos e tentamos duas maneiras de renomear índices na tabela. Agora podemos fazer isso com SSMS ou com o procedimento armazenado dedicado. Também esclarecemos os impactos da alteração dos nomes dos índices nas estatísticas e nos planos de execução de consultas. Além disso, encontrar e corrigir problemas de fragmentação de índice pode ser feito com a ajuda do dbForge Index Manager. Espero que este artigo com suas dicas práticas seja útil para o seu trabalho.

Artigos relacionados


Diferentes maneiras de renomear tabelas do SQL Server