Udostępnij za pośrednictwem


Optimizing the NewOrg Table

The HumanResources.NewOrd tabela that you created in the Populating a Table with Existing Hierarchical Data task contains all the employee information, and represents the hierarchical structure by using a hierarchyid data type. To zadanie dodaje nowe indeksy do obsługi wyszukiwania na hierarchyid Kolumna.

Indeks klastrowany

The hierarchyid kolumna (OrgNode) is the klucz podstawowy for the NewOrg tabela.Podczas tworzenia tabela zawiera indeks klastrowany o nazwie PK_NewOrg_OrgNode w celu wymuszenia unikatowości OrgNode kolumna.Ten indeks klastrowany obsługuje również wyszukiwanie głębokość pierwszej tabela.

Indeks nieklastrowany

W tym kroku tworzy dwa indeksy nieklastrowany do obsługi typowych wyszukiwania.

Indeks tabela NewOrg do skutecznego wyszukiwania

  1. Aby ułatwić kwerendy na tym samym poziomie w hierarchii, użyj GetLevel metoda w celu utworzenia kolumna obliczana, która zawiera poziom w hierarchii.Następnie utwórz indeks złożony poziom oraz Hierarchyid. Uruchom poniższy kod do tworzenia kolumna obliczeniowej i indeksu pierwszego szerokość:

    ALTER TABLE HumanResources.NewOrg 
    ADD H_level AS OrgNode.GetLevel() ;
    CREATE UNIQUE INDEX EmpBFInd 
       ON HumanResources.NewOrg(H_level, OrgNode) ;
    GO
    
  2. Utwórz indeks unikatowy oparty na Pole IDPracownika kolumna.Jest to wyszukiwania pojedynczych tradycyjnych pojedynczego pracownika, przez Pole IDPracownika liczba.Uruchom poniższy kod, aby utworzyć indeks Pole IDPracownika:

    CREATE UNIQUE INDEX EmpIDs_unq ON HumanResources.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, Title
    FROM HumanResources.NewOrg 
    ORDER BY OrgNode;
    
    SELECT OrgNode.ToString() AS LogicalNode,
    OrgNode, H_Level, EmployeeID, LoginID, Title
    FROM HumanResources.NewOrg 
    ORDER BY H_Level, OrgNode;
    
    SELECT OrgNode.ToString() AS LogicalNode,
    OrgNode, H_Level, EmployeeID, LoginID, Title
    FROM HumanResources.NewOrg 
    ORDER BY EmployeeID;
    GO
    
  4. Porównaj zestawów wyników, aby zobaczyć, jak kolejność jest przechowywany w każdy typ indeksu.Należy wykonać tylko pierwsze cztery wiersze wszystkich danych wyjściowych.

    Here is the result set.

    Indeks pierwszego głębokości: Rekordy pracowników są przechowywane przylegające do menedżera.

    LogicalNode OrgNode    H_Level EmployeeID LoginID                  Title
    /           0x         0       109        adventure-works\ken0     Chief Executive Officer
    /1/         0x58       1        12        adventure-works\terri0   Vice President of Engineering
    /1/1/       0x5AC0     2         3        adventure-works\roberto0 Engineering Manager
    /1/1/1/     0x5AD6     3         4        adventure-works\rob0     Senior Tool Designer
    

    Indeks pierwszego szerokość: Zarządzanie poziomami są przechowywane razem.

    LogicalNode OrgNode    H_Level EmployeeID LoginID                  Title
    /           0x         0       109        adventure-works\ken0     Chief Executive Officer
    /1/         0x58       1        12        adventure-works\terri0   Vice President of Engineering
    /2/         0x68       1         6        adventure-works\david0   Marketing Manager
    /3/         0x78       1        42        adventure-works\jean0    Information Services Manager
    ...
    

    Pole IDPracownika-najpierw indeksu: Wiersze są przechowywane w Pole IDPracownika sekwencji.

    LogicalNode OrgNode    H_Level EmployeeID LoginID                  Title
    /6/4/13/12/ 0x961B7640 4       1          adventure-works\guy1     Production Technician - WC60
    /2/5/       0x6C60     2       2          adventure-works\kevin0   Marketing Assistant
    /1/1/       0x5AC0     2       3          adventure-works\roberto0 Engineering Manager
    /1/1/1/     0x5AD6     3       4          adventure-works\rob0     Senior Tool Designer
    

Uwaga

Aby diagramy wskazują różnice między indeksu pierwszego głębokość i indeksu pierwszego szerokość zobacz Używanie typów danych hierarchyid (aparat bazy danych).

Aby usunąć zbędne kolumny

  1. The ManagerID kolumna represents the employee/manager relationship, which is now represented by the OrgNode kolumna.Jeśli nie ma potrzeby inne aplikacje ManagerID kolumna, należy wziąć pod uwagę, upuszczając go za pomocą następujących instrukcja:

    ALTER TABLE HumanResources.NewOrg DROP COLUMN ManagerID ;
    GO
    
  2. The EmployeeID kolumna is also redundant.The OrgNode kolumna uniquely identifies each employee.Jeśli nie ma potrzeby inne aplikacje Pole IDPracownika kolumna, należy rozważyć usunięcie indeksu, a następnie kolumna przy użyciu następującego kodu:

    DROP INDEX EmpIDs_unq ON HumanResources.NewOrg ;
    ALTER TABLE HumanResources.NewOrg DROP COLUMN EmployeeID ;
    GO
    

Aby zastąpić oryginalnej tabela w nowej tabela

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

  2. Zastąp stare EmployeeDemo tabela w nowej tabela.Uruchom poniższy kod, aby usunąć starą tabela, a następnie zmień nazwę nowej tabela o nazwie stare:

    DROP TABLE HumanResources.EmployeeDemo ;
    GO
    sp_rename 'HumanResources.NewOrg', EmployeeDemo ;
    GO
    
  3. Uruchom poniższy kod do zbadania końcowe tabela:

    SELECT * FROM HumanResources.EmployeeDemo ;
    

Keyboard Shortcuts in Reporting Services

Podsumowanie: Konwertowanie tabela na strukturę hierarchiczną