we don't need roads: a developers look into sql server indexes

30
WE DON'T NEED ROADS: A DEVELOPER'S LOOK INTO SQL SERVER INDEXES RICHIE RUMP JORRISS LLC @JORRISS HTTP://JORRISS.NET

Upload: richie-rump

Post on 04-Jul-2015

276 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: We Don't Need Roads: A Developers Look Into SQL Server Indexes

WE DON'T NEED ROADS: A

DEVELOPER'S LOOK INTO SQL

SERVER INDEXES

RICHIE RUMP

JORRISS LLC

@JORRISS

HTTP://JORRISS.NET

Page 2: We Don't Need Roads: A Developers Look Into SQL Server Indexes

WHO IS THIS GUY?

Page 3: We Don't Need Roads: A Developers Look Into SQL Server Indexes

WHAT WE’RE GOING

TO TALK ABOUT

• Why indexes?

• How indexes are used

• DB Storage Basics

• Index Structure

• Clustered indexes vs non-clustered

• Includes, Fill factor and covering

Page 4: We Don't Need Roads: A Developers Look Into SQL Server Indexes

A TRAGEDY

Page 5: We Don't Need Roads: A Developers Look Into SQL Server Indexes

Great Scott!

Page 6: We Don't Need Roads: A Developers Look Into SQL Server Indexes
Page 7: We Don't Need Roads: A Developers Look Into SQL Server Indexes

WHY ARE INDEXES

IMPORTANT?

“An index makes the

query fast.”

Reference: http://use-the-index-luke.com/sql/anatomy

Page 8: We Don't Need Roads: A Developers Look Into SQL Server Indexes

WHY ARE INDEXES

IMPORTANT?

“An index makes your

query fast.”

Reference: http://use-the-index-luke.com/sql/anatomy

Page 9: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW ARE INDEXES USED

BY SQL SERVER?

SQL Server creates a plan to

determine what’s the best way to

execute the query.

(Unlike some developers)

Page 10: We Don't Need Roads: A Developers Look Into SQL Server Indexes

EXECUTION PLANS

Demo

Page 11: We Don't Need Roads: A Developers Look Into SQL Server Indexes

TYPES OF INDEXES

• Clustered

• Nonclustered

• Heaps

• Column Store

• XML

• Spatial

• Full-Text

• Clustered

• Nonclustered

• Heaps

• Column Store

• XML

• Spatial

• Full-Text

Page 12: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW DO INDEXES

WORK?

In order to understand the magic of

indexes we need to understand how

SQL Server stores data.

Page 13: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW SQL SERVER

STORES INFORMATION

Pages

• Page Size: 8K

• Used to store just about

everything.

• Page Header: Metadata

about the page. (Page

Number, Type, etc.)

• Offset Array: Pointers to

where each row begins.

Page Header

Records

Offset Array

Page 14: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW SQL SERVER

STORES INFORMATION

Page Header

Row 1

1

Page Header

Row 1

1

Row 2

2

Page Header

Row 1

13

Row 2

Row 3

2

Page 15: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW SQL SERVER

STORES INFORMATION

Page Header

Row 1

1

Row 2

Row 3

Row 4

Row 5

2345

Page Header

Row 6

6

Row 7

Row 8

Row 9

Row 10

78910

Page Header

Row 11

11

Row 12

Row 13

Row 14

Row 15

12131415

Page 16: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW INDEXES ARE

STORED

• B-Tree or Balanced Tree

• The tree is made up of Pages

Page 17: We Don't Need Roads: A Developers Look Into SQL Server Indexes

Leaf Level

Intermediate Level

Root Level

HOW ARE INDEXES

STORED

1 -

400

201 -

400

1 -

200

151 -

200

101 -

150

251 -

300

201-

250

101 -

200

201 -

300

301 -

400

1 -

100

301 -

350

51 -

100

1 -

50

351 -

400

Page 18: We Don't Need Roads: A Developers Look Into SQL Server Indexes

HOW ARE INDEXES

STORED

1 -

400

201 -

400

1 -

200

151 -

200

101 -

150

251 -

300

201-

250

101 -

200

201 -

300

301 -

400

1 -

100

301 -

350

51 -

100

1 -

50

351 -

400

SELECT UserId, TitleFROM PostsWHERE UserId = 160

CREATE NONCLUSTERED INDEX IX_Posts_OwnerUserIdON Posts (OwnerUserId)

Page 19: We Don't Need Roads: A Developers Look Into SQL Server Indexes

CLUSTERED INDEXES

• What is a table, Alex?

• Only one per table!

• Can the key be more than one column.

• Must be unique (SQL Server will help if it isn’t.

• Can’t be more than 900 bytes combined

Page 20: We Don't Need Roads: A Developers Look Into SQL Server Indexes

Leaf Level – THIS IS SPARTA THE DATA!

Intermediate Level

Root Level

CLUSTERED INDEXES

1 -

400

201 -

400

1 -

200

151 -

200

101 -

150

251 -

300

201-

250

101 -

200

201 -

300

301 -

400

1 -

100

301 -

350

51 -

100

1 -

50

351 -

400

Page 21: We Don't Need Roads: A Developers Look Into SQL Server Indexes

NONCLUSTERED

INDEXES

• Subset of data optimized for

searching.

• Key can be more than one column

• Can’t be more than 900 bytes

combined

• Doesn’t have to be unique.

• Max of 999 per table.

(If I find 999 indexes on your table I will find you…)

Page 22: We Don't Need Roads: A Developers Look Into SQL Server Indexes

Leaf Level – Key Data and Included columns.

Intermediate Level

Root Level

NONCLUSTERED

INDEXES

1 -

400

201 -

400

1 -

200

151 -

200

101 -

150

251 -

300

201-

250

101 -

200

201 -

300

301 -

400

1 -

100

301 -

350

51 -

100

1 -

50

351 -

400

Page 23: We Don't Need Roads: A Developers Look Into SQL Server Indexes

CLUSTERED AND

NONCLUSTERED INDEXES

Demo

Page 24: We Don't Need Roads: A Developers Look Into SQL Server Indexes

DEMO REVIEW

• Key lookups are slow. Use Includes

to combat.

• Use columns in the index key if you

intend on searching them.

• Index order matters!

• Suggested indexes may not be the

best way to go.

Page 25: We Don't Need Roads: A Developers Look Into SQL Server Indexes

SORRY, YOUR PAGE IS

IN ANOTHER CASTLE

Page HeaderPage Header

Id: 2

1

Id: 3

Id: 7

Id: 12

Id: 14

2345

Id: 6

123

Page 26: We Don't Need Roads: A Developers Look Into SQL Server Indexes

FILL FACTOR

• Minimizes page splits by leaving empty

space in the page.

• Is a number 0 to 100.

• A value of 80 means that 80% of the

page will be filled with data.

• 0 and 100 both mean that 100% of the

page will be filled with data.

• Only applies to leaf pages

Page 27: We Don't Need Roads: A Developers Look Into SQL Server Indexes

DISADVANTAGES OF

INDEXES

• Increases storage.

• Creating duplicate copies of data.

• Insert, Updates and Deletes are slower.

• The DB has to delete data from the table

and all of the related indexes.

• Additional maintenance

Page 28: We Don't Need Roads: A Developers Look Into SQL Server Indexes

BONUS! ENTITY

FRAMEWORK!

Demo

Page 29: We Don't Need Roads: A Developers Look Into SQL Server Indexes

REFERENCES

Page 30: We Don't Need Roads: A Developers Look Into SQL Server Indexes

THANK YOU

Richie Rump

@Jorriss

http://jorriss.net

http://dotnetmiami.com

http://statisticsioparser.com