28
SQL/Lesson 7/Slide 1 of 32 Implementing Indexes Objectives In this lesson, you will learn to: Create a clustered index Create a nonclustered index Use the Index Tuning Wizard Understand Index Enhancements

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

  • Upload
    maili

  • View
    19

  • Download
    0

Embed Size (px)

DESCRIPTION

Objectives In this lesson, you will learn to: Create a clustered index Create a nonclustered index Use the Index Tuning Wizard Understand Index Enhancements. Getting Started - PowerPoint PPT Presentation

Citation preview

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

SQL/Lesson 7/Slide 1 of 32

Implementing Indexes

Objectives

In this lesson, you will learn to:

Create a clustered index

Create a nonclustered index

Use the Index Tuning Wizard

Understand Index Enhancements

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

SQL/Lesson 7/Slide 2 of 32

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 i.e. Indexes can enforce entity integrity.

Indexes can improve the performance of queries that use joins to retrieve tables.

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

SQL/Lesson 7/Slide 3 of 32

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 source—the table

Gets updated each time the data is modified

Types of Indexes

Clustered index

Nonclustered index

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

SQL/Lesson 7/Slide 4 of 32

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

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

SQL/Lesson 7/Slide 5 of 32

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

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

SQL/Lesson 7/Slide 6 of 32

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

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

SQL/Lesson 7/Slide 7 of 32

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.

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

SQL/Lesson 7/Slide 8 of 32

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

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

SQL/Lesson 7/Slide 9 of 32

Implementing Indexes

Optimizing Query Execution

The Employee table contains a large amount of data. The first name of each employee and the name of the Department are required to create a report. However, it takes a long time to execute the following query.

SELECT vFirstName, cDeptName

FROM Employee JOIN Department

ON

Employee.cDeptno = Department.cDeptno

Suggest and implement a solution for faster data retrieval.

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

SQL/Lesson 7/Slide 10 of 32

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

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

SQL/Lesson 7/Slide 11 of 32

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

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

SQL/Lesson 7/Slide 12 of 32

Implementing Indexes

Draft the statement to create an index

Action:

The tables on which the index would be created are: Department and Employee

The attributes on which the index would be created are: cDeptNo of Employee and cDeptNo of Department

The types of indexes to be created are:Employee - Nonclustered index;

Department - Clustered index

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

SQL/Lesson 7/Slide 13 of 32

Implementing Indexes

Create the index in the database

Action:

In the Query Analyzer window, type:

CREATE NONCLUSTERED INDEX idxdno

ON Employee(cDeptNo)

CREATE CLUSTERED INDEX idxDeptDno

ON Department(cDeptno)

Press F5 to execute the code

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

SQL/Lesson 7/Slide 14 of 32

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 Employee

sp_helpindex Department

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

SQL/Lesson 7/Slide 15 of 32

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

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

SQL/Lesson 7/Slide 16 of 32

Implementing Indexes

Wait a while…

How many clustered indexes can be created per table?

Which index organizes data logically but does not store data physically?

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

SQL/Lesson 7/Slide 17 of 32

Implementing Indexes

Composite Indexes

It is simply an index that has more than one column in its key.

Helpful wit queries that search for rows based on all of the values in multiple columns, such as LastName & FirstName.

Up to 16 columns can be used in an index. The combined size of the columns cannot exceed 900 bytes.

SQL Server doesn’t use the composite index unless the first column in the key is specified.

When building a composite index, use the column with the most unique values as the first column.

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

SQL/Lesson 7/Slide 18 of 32

Implementing Indexes

Unique Indexes

A unique index will ensure that the values must be unique within the table.

Unique indexes are how SQL Server enforces PRIMARY KEY & UNIQUE constraints for entity integrity.

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

SQL/Lesson 7/Slide 19 of 32

Implementing Indexes

Index Tuning Wizard Index Tuning Wizard available in SQL Server is used to select

and create the best possible set of indexes and information regarding a database

Uses of the Index Tuning Wizard

For a given workload, the best possible combination of indexes for a database is recommended

The effects of the proposed recommendation about the indexes, distribution of queries among tables, and the query performance in the workload will be analyzed

For a small set of problem queries, the way to tune the database will be recommended

It will specify the advanced options such as disk space constraints that can be customized

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

SQL/Lesson 7/Slide 20 of 32

Implementing Indexes

Index Enhancements

Fill Factor

FILLFACTOR clause improves performance of the system by minimizing the amount of page splitting that occurs each time an index page becomes full

Syntax

CREATE CLUSTERED INDEX index_name

ON table_name (column_name)

WITH FILLFACTOR = percentage_fillfactor

Pad_Index

Specifies the space to leave open on each page (node) in the intermediate levels of the index

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

SQL/Lesson 7/Slide 21 of 32

Implementing Indexes

Index Enhancements (Contd.)

Implications of NULL in Unique Indexes:

In a table, a unique index cannot be created on a single column if that column contains NULL in more than one row

DBCC SHOWCONTIG:

The DBCC SHOWCONTIG command is primarily used to find out why the table or the index is heavily fragmented

Syntax

DBCC SHOWCONTIG [ (table_id [, index_id])]

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

SQL/Lesson 7/Slide 22 of 32

Implementing Indexes

Index Enhancements (Contd.)

The DBCC INDEXDEFRAG:

The DBCC INDEXDEFRAG command is used to defragment clustered and secondary indexes of the specified table or view

Syntax

DBCC INDEXDEFRAG

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

SQL/Lesson 7/Slide 23 of 32

Implementing Indexes

Wait a while…

Neha wants to minimize the amount of page splitting that occurs each time an index page is full. What should she use?

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

SQL/Lesson 7/Slide 24 of 32

Implementing Indexes

Performance Considerations (Contd.)

Index Usage Criteria:

SQL Server cannot use an index until and unless the query contains a column in a valid search argument or join clause that matches at least the first column of the index

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

SQL/Lesson 7/Slide 25 of 32

Implementing Indexes

Choosing columns for Index

Primary keys and foreign keys should always be indexed.

Create indexes on columns that you often search on.

Create indexes on columns that are often used to sort the results of a query.

Create unique indexes on a primary key or alternate key.

If you often retrieve data in sorted order by a particular column, consider putting a clustered index on that column.

Consider using a non-clustered index on the primary key of a table if the table uses an IDENTITY column as its primary key.

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

SQL/Lesson 7/Slide 26 of 32

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.

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

SQL/Lesson 7/Slide 27 of 32

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.

The Index Tuning Wizard can be used to analyze the optimal use of indexes in the query entered in the Query Analyzer window.

SQL Server provides the FILLFACTOR clause to improve performance of the system by minimizing the amount of page splitting that occurs each time an index page becomes full.

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

SQL/Lesson 7/Slide 28 of 32

Implementing Indexes

Summary (Contd.) The DBCC SHOWCONTIG command is mainly used to find

out whether the table or index is heavily fragmented. Table fragmentation normally occurs when a large number of insert and update operations are performed on the table.

The DBCC INDEXDEFRAG command is used to defragment clustered and secondary indexes of the specified table or view.