Optymalizacja tabeli NewOrg
NewOrd tabela utworzonej w Wypełnianie tabeli z istniejącymi danymi hierarchicznymi zadanie zawiera wszystkie informacje o pracownikach i przedstawia strukturę hierarchiczną za pomocą hierarchyid typu danych.To zadanie dodaje nowe indeksy do obsługi wyszukiwania na hierarchyid kolumna.
Indeks klastrowany
hierarchyid kolumna (OrgNode) jest klucz podstawowy dla NewOrg tabela.Podczas tworzenia tabela zawierał indeks klastrowany o nazwie PK_NewOrg_OrgNode do wymuszenia unikatowości OrgNode kolumna.Indeks klastrowany ten obsługuje również wyszukiwania pierwszego głębokości tabela.
Indeks nieklastrowany
Spowoduje to utworzenie dwóch zbudowania indeksów do obsługi typowych wyszukiwań.
Indeks tabela NewOrg wydajne wyszukiwanie
Aby ułatwić kwerend na tym samym poziomie w hierarchii, użyj GetLevel metoda tworzenia kolumna obliczana zawiera poziom w hierarchii.Następnie utwórz indeks złożony poziom oraz Hierarchyid.Uruchom następujący kod w celu utworzenia kolumna obliczana i indeks pierwszego szerokość:
ALTER TABLE NewOrg ADD H_level AS OrgNode.GetLevel() ; CREATE UNIQUE INDEX EmpBFInd ON NewOrg(H_level, OrgNode) ; GOTworzenie indeks unikatowy na IDPracownika kolumna.To wyszukiwania tradycyjnych singleton pojedynczego pracownika, przez IDPracownika numeru.Uruchom poniższy kod, aby utworzyć indeks na IDPracownika:
CREATE UNIQUE INDEX EmpIDs_unq ON NewOrg(EmployeeID) ; GOUruchom poniższy kod do pobierania danych z tabela w kolejności od każdego z trzech indeksów:
SELECT OrgNode.ToString() AS LogicalNode, OrgNode, H_Level, EmployeeID, LoginID FROM NewOrg ORDER BY OrgNode; SELECT OrgNode.ToString() AS LogicalNode, OrgNode, H_Level, EmployeeID, LoginID FROM NewOrg ORDER BY H_Level, OrgNode; SELECT OrgNode.ToString() AS LogicalNode, OrgNode, H_Level, EmployeeID, LoginID FROM NewOrg ORDER BY EmployeeID; GOPorównaj zestawów wyników, aby zobaczyć, jak kolejność jest przechowywany w każdego rodzaju indeksu.Wykonaj tylko pierwsze cztery wiersze każdego wyjścia.
Oto zestaw wyników.
Indeks pierwszego głębokości: Rekordy pracowników są przechowywane w przyległych do menedżera.
LogicalNode OrgNode H_Level EmployeeID LoginID
/ 0x 0 1 zarifin
/1/ 0x58 1 2 tplate
/1/1/ 0x5AC0 2 4 schai
/1/1/1/ 0x5AD6 3 9 jwang
/1/1/2/ 0x5ADA 3 10 malexander
/1/2/ 0x5B40 2 5 elang
/1/3/ 0x5BC0 2 6 gsmits
/2/ 0x68 1 3 hjensen
/2/1/ 0x6AC0 2 7 sdavis
/2/2/ 0x6B40 2 8 norint
Pole IDPracownika-najpierw indeksu: Wiersze są przechowywane w IDPracownika sekwencji.
LogicalNode OrgNode H_Level EmployeeID LoginID
/ 0x 0 1 zarifin
/1/ 0x58 1 2 tplate
/2/ 0x68 1 3 hjensen
/1/1/ 0x5AC0 2 4 schai
/1/2/ 0x5B40 2 5 elang
/1/3/ 0x5BC0 2 6 gsmits
/2/1/ 0x6AC0 2 7 sdavis
/2/2/ 0x6B40 2 8 norint
/1/1/1/ 0x5AD6 3 9 jwang
/1/1/2/ 0x5ADA 3 10 malexander
Ostrzeżenie
Diagramów, które pokazują różnicę między indeks pierwszego głębokość i indeks pierwszego szerokość, zobacz Typy danych hierarchyid (aparat bazy danych).
Aby usunąć zbędne kolumny
ManagerID kolumna reprezentuje relacji pracowników i Menedżera jest teraz reprezentowana przez OrgNode kolumny.Jeśli inne aplikacje nie potrzebują ManagerID kolumna, należy rozważyć upuszczenie go przy użyciu następujących instrukcja:
ALTER TABLE NewOrg DROP COLUMN ManagerID ; GOIDPracownika kolumna również jest zbędne.OrgNode kolumna jednoznacznie identyfikuje każdego pracownika.Jeśli inne aplikacje nie potrzebują IDPracownika kolumna, należy rozważyć upuszczanie indeksu, a następnie kolumna przy użyciu następującego kodu:
DROP INDEX EmpIDs_unq ON NewOrg ; ALTER TABLE NewOrg DROP COLUMN EmployeeID ; GO
Aby zastąpić nowej tabela pierwotnej tabela.
Jeśli oryginalna tabela zawiera wszelkie dodatkowe indeksy lub ograniczenia, dodaj je do NewOrg tabeli.
Zamienić starą EmployeeDemo tabela w nowej tabela.Uruchom poniższy kod, aby usunąć starą tabela, a następnie zmień nazwę nowej tabela starą nazwą:
DROP TABLE EmployeeDemo ; GO sp_rename 'NewOrg', EmployeeDemo ; GOUruchom następujący kod w celu zbadania końcowego tabela:
SELECT * FROM EmployeeDemo ;