Database
 sql >> база данни >  >> RDS >> Database

Преименуване на индекси с процедура sp_rename

Не толкова отдавна работех по проект, в който трябваше да променим типа данни на таблица. Таблицата имаше милиони редове и ние решихме да създадем отделна таблица, използвайки съществуващата дефиниция на таблицата и да вмъкнем редовете в тази таблица. След като експортирахме данни в новата таблица, преименувахме старата таблица, ограничение и индекси с помощта на sp_rename съхранена процедура.

Настоящата статия е посветена на начините за преименуване на индекси.

Основите на съхранената процедура sp_rename

Можем да преименуваме индекса с един от следните методи:

  1. Използване на SQL Server Management Studio.
  2. Използване на sp_rename съхранена процедура.

Първо, нека разберем основите.

sp_rename Процедурата се използва за преименуване на таблици, колони на таблици, имена на индекси и типове, дефинирани от потребителя по време на изпълнение на общ език.

Синтаксисът на процедурата е както следва:

Exec sp_rename ‘object_name’, ‘new_name’, ‘object_type’

  1. име_на_обект определя името на обекта, който искате да преименувате.
    1. Ако преименувате таблицата, форматът на име_на_обект параметърът може да бъде [име_на_таблица] или [име_на_схема].[име_на_таблица] .
    2. Ако преименувате името на колоната на таблицата, форматът на име_на_обект параметърът трябва да бъде [име_на_таблица].[име_на_колона].
    3. Ако преименувате индексното име на таблицата, форматът на име_на_обект параметърът трябва да бъде [schema_name].[table_name].[index_name] . Или може да бъде [име_на_таблица].[име_индекс] .

Забележка: Ако използвате квалифицирано име на обект, трябва да посочите кавички.

  1. ново_име указва новото име на обекта, което трябва да бъде едночастният идентификатор.
  2. тип_обект определя типа обект, който искате да преименувате (незадължителен параметър). Стойността на тип_обект трябва да бъде някое от следните:
    1. КОЛОНА
    2. БАЗА ДАННИ
    3. ИНДЕКС
    4. ОБЕКТ
    5. СТАТИСТИКА

Настройка на демонстрация

За нашето обяснение и тестови цели, подготвих демо настройка. Има база данни с име StudentDB , където създадох таблица с име tblStudent .

Заявката за създаване на базата данни:

Create database [StudentDB]

Заявката за създаване на таблицата:

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))

Също така създадох индекса с име INDX_tblStudents_Std_Code вtblStudent таблица:

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

Следната заявка вмъква данните в таблицата:

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)

Сега нека видим как преименуваме PK_tblStudent индексиране с помощта на SQL Server Management Studio.

Преименувайте индекси с помощта на SSMS

Първо, нека преименуваме PK_tblStudent индекс.

  1. Стартирайте SQL Server Management Studio и се свържете с двигателя на базата данни.
  2. Разгънете StudentDB база данни> Таблици > tblStudents > Индекси
  3. Щракнете с десния бутон върху PK_tblStudent индекс> изберете Преименуване от менюто или еднократно щракване върху името на индекса.

Индексът става редактируем. Посочете новото име на индекса и натиснете Enter .

Преди да промените името на индекса, SSMS ще покаже следното предупреждение. Кликнете върху Да .

Името на индекса е променено и промените се прилагат незабавно.

Ако името на индекса не е актуализирано, опреснете Индексите папка:

Изпълнете следната заявка, за да проверите дали индексът е преименуван:

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

Изход :

Както можете да видите, името на индекса е променено и SSMS се оказа ефективен за тази цел.

Сега нека разберем как можем да преименуваме индекса с помощта на sp_rename съхранена процедура.

Преименувайте индекси с помощта на съхранената процедура sp_rename

Ще преименуваме индекса с име INDX_tblStudents_Std_Code до INDX_tblStudents_Students_Code .

Нашето sp_rename съхранената процедура ще работи в следния код:

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

Изпълнете заявката, за да проверите преименуването на индекса:

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

Изходът:

Важни бележки

Сигурност и разрешение

За да преименувате индекса, трябва да имате ALTER разрешение за индекса.

Как се променя статистиката

Когато преименуваме индекса, статистическите данни, свързани с индекса, се преименуват автоматично. Нека разгледаме статистическите данни, свързани с първичния ключ.

Отворете SQL Server Management Studio> Разгънете необходимата база данни> таблица tblStudents> Статистика

Както можете да видите, статистиката е преименувана.

Как се променя планът за изпълнение на заявка

Когато преименуваме индекса, метаданните на плана за изпълнение на заявката се променят твърде автоматично. За да стане по-ясно, нека прегледаме плана за изпълнение на заявката с помощта на PK_tblStudent индекс.

Изпълнете следния оператор SELECT:

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

Изходът:

Името на индекса се променя в плана за изпълнение.

Резюме

Затова научихме за sp_rename синтаксис и използване на съхранени процедури. Освен това идентифицирахме и опитахме два начина за преименуване на индекси в таблицата. Сега можем да го направим както с SSMS, така и със специалната съхранена процедура. Ние също така изяснихме въздействието от промяната на имената на индексите върху статистическите данни и плановете за изпълнение на заявки. Нещо повече, намирането и коригирането на проблеми с фрагментацията на индекса може да бъде постигнато с помощта на dbForge Index Manager. Надявам се, че тази статия с нейните практически съвети ще се окаже полезна за вашата работа.

Сродни статии

Различни начини за преименуване на таблици на SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 начина за изброяване на временни таблици с помощта на T-SQL

  2. Език за дефиниране на SQL данни

  3. Четени второстепенни материали на бюджет

  4. Разбиране на времето на оператора на план за изпълнение

  5. Основи на табличните изрази, част 7 – CTE, съображения за оптимизация