Vous êtes sur la page 1sur 18

Implementing Indexes

Objectives
In this lesson, you will learn to: Create a clustered index Create a nonclustered index

Slide 1 of 18

Implementing Indexes
Getting Started
An index is an internal table structure that SQL Server uses to provide quick access to rows of a table based on the values of one or more columns Advantages of Using Indexes

Improve the speed of the execution of queries


Enforce uniqueness of data Speed up joins between tables

Slide 2 of 18

Implementing Indexes
Getting Started (Contd.)
Disadvantages of Using Indexes
Takes time to create an index Takes large amount of disk space to store data along with the original data sourcethe table Gets updated each time the data is modified Types of Indexes

Clustered index
Nonclustered index

Slide 3 of 18

Implementing Indexes
Getting Started (Contd.)
Clustered Index
In a clustered index:

The data is physically sorted Only one clustered index can be created per table

Nonclustered Index In a nonclustered index:

The physical order of the rows is not the same as the index order

Slide 4 of 18

Implementing Indexes
Getting Started (Contd.)

Nonclustered indexes are typically created on columns used in joins and WHERE clauses, and whose values may be modified frequently
SQL Server creates nonclustered indexes by default when the CREATE INDEX command is given There can be as many as 249 nonclustered indexes per table

Slide 5 of 18

Implementing Indexes
Getting Started (Contd.)
Indexes and Heap Structures
SQL Server supports indexes defined on any column in a table, including computed columns

If a table does not have any clustered index, data is not stored in a particular order. This structure is called a heap

Slide 6 of 18

Implementing Indexes
Getting Started (Contd.)
Features of Indexes
Indexes accelerate queries that join tables, and perform sorting and grouping.

Indexes can be used to enforce uniqueness of rows.


Indexes are useful on columns in which the majority of data is unique.

When you modify the data of an indexed column, the associated indexes are updated automatically.
You require time and resources to maintain indexes. You should not create an index that is not used frequently.
Slide 7 of 18

Implementing Indexes
Getting Started (Contd.)
A clustered index should be created before a nonclustered index. A clustered index changes the order of rows. A nonclustered index would need to be rebuilt if it is built before a clustered index
Typically, nonclustered indexes are created on foreign keys. Syntax

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name


ON table_name(column_name[,column_name])
Slide 8 of 18

Implementing Indexes
7.D.1 Optimizing Query Execution
The ExternalCandidate table contains a large amount of data. The first name of each candidate and the name of the recruitment agency are required to create a report. However, it takes a long time to execute the following query. SELECT vFirstName, cName FROM ExternalCandidate JOIN RecruitmentAgencies ON ExternalCandidate.cAgencyCode = RecruitmentAgencies.cAgencyCode Suggest and implement a solution for faster data retrieval.
Slide 9 of 18

Implementing Indexes
Task List
Identify how to speed up data retrieval Draft the statement to create an index Create the index in the database Verify that the index has been created Verify that the query execution is faster

Slide 10 of 18

Implementing Indexes
Identify how to speed up data retrieval
Indexes are used to: Speed up data retrieval Enforce the uniqueness of rows Result: To speed up data retrieval, use indexes

Slide 11 of 18

Implementing Indexes
Draft the statement to create an index
Action:
The tables on which the index would be created are: ExternalCandidate and RecruitmentAgencies

The attributes on which the index would be created are: cAgencyCode of ExternalCandidate and cAgencyCode of RecruitmentAgencies
The types of indexes to be created are: ExternalCandidate - Nonclustered index; RecruitmentAgencies - Clustered index The names of the indexes to be created are idxRecruitment and idxExternalCandidate
Slide 12 of 18

Implementing Indexes
Create the index in the database
Action: In the Query Analyzer window, type:
CREATE NONCLUSTERED INDEX idxExternalCandidate ON ExternalCandidate(cAgencyCode) CREATE CLUSTERED INDEX idxRecruitment

ON RecruitmentAgencies(cAgencyCode)

Press F5 to execute the code

Slide 13 of 18

Implementing Indexes
Verify that the index has been created
To verify that the index has been created, use the sp_helpindex command
Syntax sp_helpindex table_name Action: In the Query Analyzer window, type: sp_helpindex ExternalCandidate

Press F5 to execute the command


In the Query Analyzer window, type: sp_helpindex RecruitmentAgencies

Press F5 to execute the command


Slide 14 of 18

Implementing Indexes
Verify that the query execution is faster
Action:
Execute the query after creating the index. If there is a lot of data, you can note the difference in speed

Slide 15 of 18

Implementing Indexes
Just a Minute
How many clustered indexes can be created per table?
Which index organizes data logically but does not store data physically?

Slide 16 of 18

Implementing Indexes
Summary
In this lesson, you learned that:
Indexes are created to enhance the performance of queries. There are two types of indexes clustered and nonclustered. Indexes are created using the CREATE INDEX statement. Data is physically sorted in a clustered index. Clustered indexes should be built on an attribute whose values are unique and do not change often. In a nonclustered index, the physical order of rows is not the same as that of the index order.
Slide 17 of 18

Implementing Indexes
Summary (Contd.)
A nonclustered index should be built on an attribute which is normally used in joins and the WHERE clause. The values of this attribute may often change.
A nonclustered index is the default index that is created with the CREATE INDEX command.

Slide 18 of 18