加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Java高级编程——MySQL索引实现及优化道理理会

发布时间:2018-08-16 08:25:52 所属栏目:编程 来源:Java高并发框架
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 在MySQL中,索引属于存储引擎级此外面念,差异存储引擎对索引的实现方法是差异的,本文首要接头MyISAM和InnoDB两个存储引擎的索引实现方法。 MyISAM索引实现MyISAM引擎行使B+Tree作

机能的晋升是明显的,查询速率进步了120多倍。前缀索引分身索引巨细和查询速率,可是其弱点是不能用于ORDER BY和GROUP BY操纵,也不能用于Covering index(即当索引自己包括查询所需所稀有据时,不再见见数据文件自己)。InnoDB的主键选择与插入优化在行使InnoDB存储引擎时,假如没有出格的必要,请永久行使一个与营业无关的自增字段作为主键。常常看到有帖子或博客接头主键选择题目,有人提议行使营业无关的自增主键,有人认为没有须要,完全可以行使如学号或身份证号这种独一字段作为主键。岂论支持哪种论点,大大都论据都是营业层面的。假如从数据库索引优化角度看,行使InnoDB引擎而不行使自增主键绝对是一个糟糕的主意。上文接头过InnoDB的索引实现,InnoDB行使聚积索引,数据记录自己被存于主索引(一颗B+Tree)的叶子节点上。这就要求统一个叶子节点内(巨细为一个内存页或磁盘页)的各条数据记录按主键次序存放,因此每当有一条新的记录插入时,MySQL会按照其主键将其插入恰当的节点和位置,假如页面到达装载因子(InnoDB默以为15/16),则开发一个新的页(节点)。假如表行使自增主键,那么每次插入新的记录,记录就会次序添加到当前索引节点的后续位置,当一页写满,就会自动开发一个新的页。如下图所示:

Java高级编程——MySQL索引实现及优化道理理会

这样就会形成一个紧凑的索引布局,近似次序填满。因为每次插入时也不必要移动已稀有据,因此服从很高,也不会增进许多开销在维护索引上。假如行使非自增主键(假如身份证号或学号等),因为每次插入主键的值近似于随机,因此每次新记载都要被插到现有索引页得中间某个位置:

Java高级编程——MySQL索引实现及优化道理理会

此时MySQL不得不为了将新记录插到吻合位置而移动数据,乃至方针页面也许已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读返来,这增进了许多开销,同时频仍的移动、分页操纵造成了大量的碎片,获得了不足紧凑的索引布局,后续不得不通过OPTIMIZE TABLE来重建表并优化添补页面。因此,只要可以,请只管在InnoDB上回收自增字段做主键。

跋文

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读