Udostępnij przez


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

  1. 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) ;
    GO
    
  2. Tworzenie 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) ;
    GO
    
  3. Uruchom 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;
    GO
    
  4. Poró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

  1. 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 ;
    GO
    
  2. IDPracownika 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.

  1. Jeśli oryginalna tabela zawiera wszelkie dodatkowe indeksy lub ograniczenia, dodaj je do NewOrg tabeli.

  2. 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 ;
    GO
    
  3. Uruchom następujący kod w celu zbadania końcowego tabela:

    SELECT * FROM EmployeeDemo ;