sql >> Databáze >  >> RDS >> Database

Přejmenování indexů pomocí procedury sp_rename

Není to tak dávno, co jsem pracoval na projektu, kde jsme potřebovali změnit datový typ tabulky. Tabulka měla miliony řádků a rozhodli jsme se vytvořit samostatnou tabulku pomocí stávající definice tabulky a vložit řádky do této tabulky. Po exportu dat do nové tabulky jsme přejmenovali starou tabulku, omezení a indexy pomocí sp_rename uložená procedura.

Aktuální článek je věnován způsobům přejmenování indexů.

Základy uložené procedury sp_rename

Index můžeme přejmenovat jednou z následujících metod:

  1. Použití SQL Server Management Studio.
  2. Pomocí sp_rename uložená procedura.

Nejprve pochopme základy.

sp_rename procedura se používá k přejmenování tabulek, sloupců tabulek, názvů indexů a běžně definovaných typů běhového prostředí jazyka.

Syntaxe procedury je následující:

Exec sp_rename 'object_name', 'new_name', 'object_type'

  1. název_objektu určuje název objektu, který chcete přejmenovat.
    1. Pokud tabulku přejmenováváte, formát název_objektu parametr může být [název_tabulky] nebo [schema_name].[table_name] .
    2. Pokud přejmenováváte název sloupce tabulky, formát název_objektu parametr by měl být [název_tabulky].[název_sloupce].
    3. Pokud přejmenováváte indexový název tabulky, formát název_objektu parametr by měl být [název_schématu].[název_tabulky].[název_indexu] . Nebo to může být [název_tabulky].[index_název] .

Poznámka: Pokud používáte kvalifikovaný název objektu, musíte zadat uvozovky.

  1. nové_jméno určuje nový název objektu, který musí být jednodílným identifikátorem.
  2. typ_objektu určuje typ objektu, který chcete přejmenovat (volitelný parametr). Hodnota parametru object_type by měl být některý z následujících:
    1. SLOUPEC
    2. DATABÁZE
    3. INDEX
    4. OBJEKT
    5. STATISTIKY

Nastavení ukázky

Pro naše vysvětlení a testovací účely jsem připravil demo nastavení. Existuje databáze s názvem StudentDB , kde jsem vytvořil tabulku s názvem tblStudent .

Dotaz na vytvoření databáze:

Create database [StudentDB]

Dotaz na vytvoření tabulky:

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

Vytvořil jsem také index s názvem INDX_tblStudents_Std_Code na tblStudent tabulka:

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

Následující dotaz vloží data do tabulky:

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)

Nyní se podívejme, jak přejmenujeme PK_tblStudent index pomocí SQL Server Management Studio.

Přejmenování indexů pomocí SSMS

Nejprve přejmenujme PK_tblStudent index.

  1. Spusťte SQL Server Management Studio a připojte se k databázovému stroji.
  2. Rozbalte StudentDB databáze> Tabulky > tblStudents > Indexy
  3. Klikněte pravým tlačítkem na PK_tblStudent index> vyberte Přejmenovat z nabídky nebo jedním kliknutím na název indexu.

Index bude upravitelný. Zadejte nový název indexu a stiskněte Enter .

Před změnou názvu indexu zobrazí SSMS následující varování. Klikněte na Ano .

Název indexu byl změněn a změny se použijí okamžitě.

Pokud se název indexu neaktualizuje, obnovte Indexy složka:

Spuštěním následujícího dotazu ověřte, zda byl index přejmenován:

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

Výstup :

Jak vidíte, název indexu byl změněn a SSMS se pro tento účel osvědčilo.

Nyní pochopíme, jak můžeme přejmenovat index pomocí sp_rename uložená procedura.

Přejmenujte indexy pomocí uložené procedury sp_rename

Chystáme se přejmenovat index na INDX_tblStudents_Std_Code na INDX_tblStudents_Student_Code .

Naše sp_rename uložená procedura bude fungovat v následujícím kódu:

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

Spuštěním dotazu ověřte přejmenování indexu:

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

Výstup:

Důležité poznámky

Zabezpečení a oprávnění

Chcete-li index přejmenovat, musíte mít ALTER oprávnění k indexu.

Jak se mění statistiky

Když index přejmenujeme, statistiky spojené s indexem se přejmenují automaticky. Podívejme se na statistiky spojené s primárním klíčem.

Otevřete SQL Server Management Studio> rozbalte potřebnou databázi> tabulka tblStudents> Statistiky

Jak můžete vidět, statistiky byly přejmenovány.

Jak se mění plán provádění dotazů

Když index přejmenujeme, metadata plánu provádění dotazu se změní příliš automaticky. Aby to bylo jasnější, podívejme se na plán provádění dotazu pomocí PK_tblStudent index.

Spusťte následující příkaz SELECT:

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

Výstup:

Název indexu se změní v plánu provádění.

Shrnutí

Proto jsme se dozvěděli o sp_rename syntaxe a použití uložené procedury. Kromě toho jsme identifikovali a vyzkoušeli dva způsoby přejmenování indexů v tabulce. Nyní to můžeme udělat jak pomocí SSMS, tak pomocí vyhrazené uložené procedury. Také jsme objasnili dopady změny názvů indexů na statistiky a plány provádění dotazů. A co víc, najít a opravit problémy s fragmentací indexu lze provést pomocí dbForge Index Manager. Doufám, že vám tento článek s praktickými tipy pomůže při práci.

Související články

Různé způsoby přejmenování tabulek SQL Server


  1. Jak nakonfigurovat sdílení PostgreSQL pomocí ClusterControl

  2. Unikátní modelové pole v Django a rozlišování velkých a malých písmen (postgres)

  3. Slovník databáze DevOps pro začátečníky v MySQL

  4. Je možné provést více aktualizací jedním příkazem UPDATE SQL?