my sql索引技术

16
MySQL索引 作者:东东堂

Upload: a8888dongdong

Post on 30-Jul-2015

75 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: My sql索引技术

MySQL索引

作者:东东堂

Page 2: My sql索引技术

议程

MySQL索引的基本知识;

索引的作用;

支持的索引类型;

索引设计的基本原则;

常见误区;

Page 3: My sql索引技术

MySQL的索引基本知识

1. 目前使用最广泛的innodb引擎 ,数据记录通过主键的顺序来组织;

2. 整个记录实际是有顺序的,以主健作为查找的;

3. 如果在创建表的时候没有定义主健,innodb会自动为表创建隐含主健列;

Page 4: My sql索引技术

Innodb记录存储情况

叶子节点的栏位中,不但是有主健,而且还有数据记录。这和ORACLE数据库的IOT表的结构一样.缺点是当数据INSERT并发量增加时很容易形成数据热块.

Page 5: My sql索引技术

Innodb其他索引存储情况

1. 其他的索引也称为Secondex key; 2. 默认的索引类型是Btree; 3. 索引记录的指针指向是的主健值; 4. 通过主健记录再定位到相关的记录;

Page 6: My sql索引技术

Mysql索引的作用

加速数据检索速度; 优化器在做评估的时候,根据返回的数据等指标来决定是否通过索引返

回记录更快,而不是使用全表扫描.

优化排序; 在排序的栏位上有索引可以使用该栏位来排序.

行锁实现;

Innodb的行锁就是过索引来实现,如果where条件没列没有索引,会发生”

无索引锁升级”,从而锁住整个表.

Page 7: My sql索引技术

Mysql索引的作用

直接返回所查数据列

当索引已经满足查询要求,不需要再去查询表,这种索引叫作”Cover

Index”;

实现约束 当在主健,外健相关列上有索引时候,Insert记录时,只需要通过索引查

询就可以满足相关条件

连接优化

Page 8: My sql索引技术

Innodb支持的索引类型

Btree索引,默认选项

mysql> alter table t3 add index ix_b (b);

Btree比较适合做范围查找,如<,>,between,Like等等

Page 9: My sql索引技术

Innodb支持的索引类型

HASH索引

mysql> alter table t3 add index ix_b using hash (b);

Innodb使用HASH函数把索引的Key存储到相应的桶中,非常适合等值查找(=), 对于范围查询和排序不会使用.

Page 10: My sql索引技术

Innodb支持的索引类型

FULL-TEXT索引

mysql> alter table t3 add fulltext index ix_b (b);

Mysql 5.6开始支持 ,适合TEXT字段,性能不是很理想,使用比较少.

Page 11: My sql索引技术

索引设计的基本原则

1,在索引带来的好处和增加索引带来的开销取得一个平衡;

2,被索引的栏位字段应该尽可能小;

3,多栏位索引选择合适的栏位顺序非常重要;

Page 12: My sql索引技术

索引设计的基本原则

4,索引的选择性也是决定是否增加索引考虑的重要原因;

5,对于字符栏位的索引,可以考虑使用前缀索引来减少整体索引的大小;

6,根据查询的特点选择合适的索引类型,一般建议使用Btree;

Page 13: My sql索引技术

索引设计的基本原则

7,索引的顺序,如果专为排序使用的索引,考虑索引的顺序和排序的顺序一致;

8, 当使用读写分离的部署中,在主库中用作只读

的索引可以删除,保留只读库上的索引,减少主库的索引维护开销.

Page 14: My sql索引技术

常见误区

增加的索引是否合理

对于很少使用的索引,考虑删除掉.不要一看到有where条件的栏位,

就建索引

索引的使用 在like条件中,如首尾都有%,无法使用索引,比如

Where name like ‘%a%’;

排序和Where条件查询索引

如果使用不同的索引,则where条件中的索引不会被用到,引发性能问

题.

Page 15: My sql索引技术

常见误区

多栏位索引,没有把使用最多的栏位放在最左边

多栏位索引,如果where和order by中使用不同的栏位,导致索引无法被使用.

显式或隐式的数据转换导致索引无法使用.

Page 16: My sql索引技术

Q&A QQ:327356330 Oracle DBA群:89259843,MySQL DBA群:148695939 新浪微博: oracle东东堂