mysql优化之索引原理

首先声明,非本人同意不得转载!!!

索引原理

 

Hash索引,在MySQL中只有Memory引擎支持

当Hash索引中出现哈希冲突的时候,存储引擎需要遍历链表中所有的行,找到所有符合条件的数据。

冲突越多,索引代价越大。

 

<=> 并非 <>

 

Mysql 的 InnoDB引擎 有一个功能叫做“自适应哈希索引”。当MySQL发现某些索引值被频繁使用时,会在内存中基于BTree索引创建一个哈希索引。整个过程无法认为控制,仅可以通过innodb_adaptive_hash_index属性配置是否开启,默认开启该功能。

 

 

 

InnoDB聚簇索引(主键索引)

 

已满的页中,如果需要插入新的数据,会导致页分裂

 

InnoDB二级索引

Select id,name from tablename where name=’Rose’; #只需要遍历二级索引即可得到结果。

 

Myisam引擎索引

Myisam引擎中,主键索引与其他索引在结构上没有区别。

 

InnoDB中默认最大填充因子是页的15/16大小 MySQL默认每页16K 数据达到15K的时候, 分配到下一页。 不同页之间可能不是顺序的,只是通过一个指针相连。

 

InnoDB主键最好是连续递增的值,尽量避免使用UUID之类的长而无需的字符串。使用UUID做主键,在BTree的聚簇索引上,会导致插入速度慢,索引空间更大,其他二级索引空间也会更大。

索引空间变大的原因有两个,一个是由于主键字段更长,其次是因为页分裂和碎片(页不饱和)导致。

 

索引列的字段要尽可能小 因为BTree索引树高度页的大小以及页里面的数据大小决定的。数据越小,磁盘块存储的数据越多,树的高度越低,查询性能越高。

三星索引:

1、索引将相关的记录放到一起(Where子句后面的条件都可以使用索引,体现组合索引的利用)

2、索引中数据的顺序和查找中的排列顺序一致(利用索引的有序性直接得到排序结果)

3、索引中的列包含了查询中全部需要的列(利用索引中的值,直接得到查询结果,避免回表)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值