Top Banner
MySQL Index Andy Yao Friday, December 30, 11
38
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mysql index

MySQL IndexAndy Yao

Friday, December 30, 11

Page 2: Mysql index

MySQL Basic

Friday, December 30, 11

Page 3: Mysql index

MySQL Architecture

Friday, December 30, 11

Page 4: Mysql index

Storage Engine: MyISAM

Table lock

No automated data recovery

No transactions

Only indexes are cached in memory

Compact storage

Friday, December 30, 11

Page 5: Mysql index

Storage Engine: InnoDB

Transactional

Foreign keys

Multiversioning

Clustered by primary key

No cached count(*)

Blocking AUTO_INCREMENT

Optimized cache

Friday, December 30, 11

Page 6: Mysql index

InnoDB Storage Architecture Tablespaces

leaf node segment

non-leaf node segment

rollback node segment

Segment

extent

extent

extent

extent

...

Extent

row row

row row

...

PageRow

trx id

row id

roll pointer

col 1 col n... 64 pages

Friday, December 30, 11

Page 7: Mysql index

InnoDB and File system

 File  system                            -­‐>  InnoDB  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  disk  partition                      -­‐>  tablespace  file                                          -­‐>  segment  inode                                        -­‐>  fsp0fsp.c  'inode'  fs  space  allocation  unit  -­‐>  extent  disk  block                              -­‐>  page  (16  kB)

Friday, December 30, 11

Page 8: Mysql index

Types of Indexes

Friday, December 30, 11

Page 9: Mysql index

Types of Indexes

B+Tree indexes

Hash indexes

R-Tree indexes

Full-text indexes

Friday, December 30, 11

Page 10: Mysql index

B+Tree Indexes

Friday, December 30, 11

Page 11: Mysql index

Binary search tree

2

3

5

7

6 8

2

3

6

7

85

Binary search tree AVL tree

Friday, December 30, 11

Page 12: Mysql index

B Tree

25 50 75 ...

5 10 15 20 25 30 50 55 60 65 75 80 85 90

Friday, December 30, 11

Page 13: Mysql index

B+Tree

25 50 75 ...

5 10 15 20 25 30 50 55 60 65 75 80 85 90

Friday, December 30, 11

Page 14: Mysql index

B+Tree Indexes

Friday, December 30, 11

Page 15: Mysql index

B+tree indexes: Demo

CREATE TABLE People (last_name varchar(50) not null,first_name varchar(50) not null,dob date not null,gender enum('m', 'f') not null,

key(last_name, first_name, dob) );

Friday, December 30, 11

Page 16: Mysql index

B+tree indexes: Demo

Friday, December 30, 11

Page 17: Mysql index

B+Tree: Types of queries

Match the full value

where last_name=? and first_name=? and bod=?

Match a leftmost prefix

where last_name=?

where last_name=?

Friday, December 30, 11

Page 18: Mysql index

B+Tree: Types of queries

Match a column prefix

where last_name like ”Liang%”

Match a range of values

where last_name > ?

Friday, December 30, 11

Page 19: Mysql index

B+Tree: Types of queries

Match one part exactly and match a range on another

where last_name=? and first_name>?

Index only queries

select first_name where last_name=?

Friday, December 30, 11

Page 20: Mysql index

B+Tree: Limitations

Doesn’t start from leftmost

where first_name=?

Skip columns in the index

where last_name=? and bod=?

Friday, December 30, 11

Page 21: Mysql index

B+Tree: Limitations

More than one range conditions

where last_name>? and first_name>?

Can’t optimize to the right of the first range conditon

where last_name>? and first_name=?

Friday, December 30, 11

Page 22: Mysql index

Clustered Index

Friday, December 30, 11

Page 23: Mysql index

Clustered Index

Non Clustered

Clustered

Index organized table

Heap table

Friday, December 30, 11

Page 24: Mysql index

Friday, December 30, 11

Page 25: Mysql index

Useful Commands

Friday, December 30, 11

Page 26: Mysql index

Useful commands

show index from TABLE;

explain [extended] SELECT * FROM TABLE;

UPDATE, DELETE convert to SELECT

Friday, December 30, 11

Page 27: Mysql index

Explain

select_tpe

simple, primary, subquery, derived, union

type

all < index < range < ref < eq_ref < const, system < null

Friday, December 30, 11

Page 28: Mysql index

Explain

Extra

using where

using index

using filesort

using temporary

Friday, December 30, 11

Page 29: Mysql index

Indexing Strategies

Friday, December 30, 11

Page 30: Mysql index

Indexing Strategies

Isolate the column

Prefix Indexes and Index Selectivity

Covering Indexes

Use Index Scan For Sorts

Friday, December 30, 11

Page 31: Mysql index

Isolate the column

where last_name=”Fred”

where a+1=5

where md5(a)=”45c48cce2e2d7fbdea1afc5”

Friday, December 30, 11

Page 32: Mysql index

Prefix index & Index selectivity

Prefix index

KEY index_on_sum(`sum`(5))

Index Selectivity

Cardinality/Count(*)

0..1

Friday, December 30, 11

Page 33: Mysql index

Covering Index

select first_name from people where last_name=”fred”

Extra: Using index

Not support “Like” in query

Friday, December 30, 11

Page 34: Mysql index

Using Index for Sorts

select * from people where last_name=? and first_name =? order by dob

Friday, December 30, 11

Page 35: Mysql index

Redundant/Duplicate index

Duplicate

primary key(id)

key(id)

unique(id)

Redundant

key(a, b, c)

key(a, b)

key(a)

key(b, a)

Friday, December 30, 11

Page 36: Mysql index

Others

Index merge

Or

Sub-query/Join/Union

Group/Order

Locking

Query optimization

Friday, December 30, 11

Page 37: Mysql index

References

http://www.mysqlperformanceblog.com/

http://www.percona.com/

Friday, December 30, 11

Page 38: Mysql index

Questions?

Friday, December 30, 11