my sql索引技术
TRANSCRIPT
MySQL索引
作者:东东堂
议程
MySQL索引的基本知识;
索引的作用;
支持的索引类型;
索引设计的基本原则;
常见误区;
MySQL的索引基本知识
1. 目前使用最广泛的innodb引擎 ,数据记录通过主键的顺序来组织;
2. 整个记录实际是有顺序的,以主健作为查找的;
3. 如果在创建表的时候没有定义主健,innodb会自动为表创建隐含主健列;
Innodb记录存储情况
叶子节点的栏位中,不但是有主健,而且还有数据记录。这和ORACLE数据库的IOT表的结构一样.缺点是当数据INSERT并发量增加时很容易形成数据热块.
Innodb其他索引存储情况
1. 其他的索引也称为Secondex key; 2. 默认的索引类型是Btree; 3. 索引记录的指针指向是的主健值; 4. 通过主健记录再定位到相关的记录;
Mysql索引的作用
加速数据检索速度; 优化器在做评估的时候,根据返回的数据等指标来决定是否通过索引返
回记录更快,而不是使用全表扫描.
优化排序; 在排序的栏位上有索引可以使用该栏位来排序.
行锁实现;
Innodb的行锁就是过索引来实现,如果where条件没列没有索引,会发生”
无索引锁升级”,从而锁住整个表.
Mysql索引的作用
直接返回所查数据列
当索引已经满足查询要求,不需要再去查询表,这种索引叫作”Cover
Index”;
实现约束 当在主健,外健相关列上有索引时候,Insert记录时,只需要通过索引查
询就可以满足相关条件
连接优化
Innodb支持的索引类型
Btree索引,默认选项
mysql> alter table t3 add index ix_b (b);
Btree比较适合做范围查找,如<,>,between,Like等等
Innodb支持的索引类型
HASH索引
mysql> alter table t3 add index ix_b using hash (b);
Innodb使用HASH函数把索引的Key存储到相应的桶中,非常适合等值查找(=), 对于范围查询和排序不会使用.
Innodb支持的索引类型
FULL-TEXT索引
mysql> alter table t3 add fulltext index ix_b (b);
Mysql 5.6开始支持 ,适合TEXT字段,性能不是很理想,使用比较少.
索引设计的基本原则
1,在索引带来的好处和增加索引带来的开销取得一个平衡;
2,被索引的栏位字段应该尽可能小;
3,多栏位索引选择合适的栏位顺序非常重要;
索引设计的基本原则
4,索引的选择性也是决定是否增加索引考虑的重要原因;
5,对于字符栏位的索引,可以考虑使用前缀索引来减少整体索引的大小;
6,根据查询的特点选择合适的索引类型,一般建议使用Btree;
索引设计的基本原则
7,索引的顺序,如果专为排序使用的索引,考虑索引的顺序和排序的顺序一致;
8, 当使用读写分离的部署中,在主库中用作只读
的索引可以删除,保留只读库上的索引,减少主库的索引维护开销.
常见误区
增加的索引是否合理
对于很少使用的索引,考虑删除掉.不要一看到有where条件的栏位,
就建索引
索引的使用 在like条件中,如首尾都有%,无法使用索引,比如
Where name like ‘%a%’;
排序和Where条件查询索引
如果使用不同的索引,则where条件中的索引不会被用到,引发性能问
题.
常见误区
多栏位索引,没有把使用最多的栏位放在最左边
多栏位索引,如果where和order by中使用不同的栏位,导致索引无法被使用.
显式或隐式的数据转换导致索引无法使用.
Q&A QQ:327356330 Oracle DBA群:89259843,MySQL DBA群:148695939 新浪微博: oracle东东堂