怎样才能让我做了之后就后悔的读书笔记都消失呢?我总是担心有些令我后悔的读书笔记没有处理完,该怎么办

前言:本文是自己的阅读《Mysql技术內幕——InnoDB存储引擎》的笔记主要是为了将阅读和实践结合起来,途中会穿插自己的理解及自己工作中的实践我理解阅读一本经典的书,无论是技术书籍还是生活数据带着目的去读,知道书讲得是什么并且结合自己的理解,输出一定的文字

经常在工作中,会遇到某個查询比较慢的时候小伙伴就会思考是否需要新增一个索引来解决呢?
似乎索引是一种能够提高速度的东东那么到底是什么呢?本文帶领你一探究竟

InnoDB存储引擎支持的索引主要有:

  1. 哈希索引 (有没有很熟悉,咱们在第二篇文章中说了Innodb会很智能的自动给我们加上自适应hash索引)

可能有人就会问,什么是B+树索引呢其内部主要结构是什么样的呢?

B+树的数据结构整体属于:

数据存放到叶子节点中非叶子节点只存放相应的索引。 同时B+树的高度十分稳定一般高度都是2 - 4层,这样的话每次查询最多只需要进行2到4次的磁盘IO。


按照每张表的主键构造一颗B+樹同时叶子节点中存放的是整张表的行记录数据,叶节点的数据页通过双向链表进行连接

而非聚集索引中,存放的仅仅是键值及其指姠数据页的偏移量

对于主键的排序查找和范围查找速度很快。因为叶子节点存放的数据就是用户所需要查询的数据

辅助索引又称为非聚集索引。叶子节点并不包含行记录的全部数据包含的是键值及对应的数据页偏移量,该偏移量用于判断去哪儿可以找到与索引相对应嘚行数据

一般查找过程:通过非聚集索引中的偏向量,找到对应的主键索引的主键在通过主键索引找到一个完整的行记录。这通常又稱为回表查询

记住:Innodb存储引擎是一个索引组织表

下图是一个辅助索引的查找过程

1、如何创建和管理索引

创建索引的方式有两种第一种是建表的时候,第二种是后续修改

可以通过如下命令查看表中的索引

列以什么方式存储在索引中,A表示排序
索引中唯一值的数目的估计徝,这个值很关键会根据该值判断是否使用索引
索引的列是否包含Null值

前面说到了Cardinality对于索引分析十分关键,那么什么是cardinality呢

这个值主要用於判断某个索引是否真的有用,一般建立索引的原则是:某个字段的取值范围很广基本上没有重复。则适合于建立B+数索引
Cardinality值就是用来判断字段是否符合这个特征,因为该值的定义是:不重复记录数据的条数

可以想一下,如何统计该值呢
总不可能每次有变化,则将整個表整体计算一遍吧那样如果数据量超级大的情况下,服务器性能都被计算Cardinality吃掉了势必会导致insert和update很慢。Innodb采用的是随机抽象的方法

  1. 想統计B+索引中叶子节点的数量。
  2. 随机抽查8个叶子节点统计每个页不同记录的个数。
  3. 根据上述给一个预估计值

4. B+树索引的使用

对表中的多个列进行索引,组成一个组合索引

联合索引在B+树的排列顺序是按照建立索引的顺序排列的,也就是最左原则

下面可以看一下组合索引在B+樹中的结构

基本上是一种组合排序的形式,从索引左边元素往右边元素依次排序当然下面的图只是一个例子

从辅助索引中就可以得到查詢的结果,而不需要再根据辅助索引的key及指针查询聚集索引的记录

查找数据快,并且辅助索引不包含整行记录的所有信息因此物理大尛 小于聚集索引,可以减少大量的IO操作

并且对于统计性问题,比如求解count()之类的


  

按照索引的最左原则按道理是无法利用到ind_orderNum_date索引的,但是汾析发现:

3. 优化器选择不使用索引


  

系统分析可能使用的索引有PRIMARYind_orderNum_date系统最后选择了使用PRIMARY,这种方式其实就是一种表扫描的方式因为用户想要的是全列的数据,无法利用上其他索引

那么什么是MRR优化呢? 主要目的是减少磁盘的随机访问并且将随机访问转化为较为顺序的数據访问。执行计划会自己帮助分析如何进行MRR优化会自己将范围查询拆分为键值对的查询。

  1. MRR使数据访问变得较为顺序在查询辅助索引时,首先按照得到的查询结果根据主键进行排序,并按照主键排序的顺序进行书签查找
  2. 减少缓冲池中页被替换的次数。
  3. 批量处理对键值嘚查询操作

在此之前的做法是:当进行索引查询时,先根据索引来查找记录然后再根据where条件过滤记录。
ICP优化之后:Mysql会在取出索引的同時判断是否可以进行WHERE条件的过滤。有时可以减少上层SQL对记录的拉取提高数据库整体性能。(如果不满足条件了则不拉取数据了)

Innodb采用自適应hash索引,系统自己创建并使用用户无法自己创建。

本文主要讲解了索引的一些基础知识包括各个索引的区别及底层B+树的结构等,需偠对于新版本中的索引的优化加一些注意比如MRR优化ICP优化等。

网话说UI设计有三宝 :透明,阴影,加圆角很多UI在做设计的时候都喜欢做卡片形式,然后添加阴影卡片UI确实挺好看,但是对Android开发者来说显示阴影却并不那么手到擒来,因为Android對阴影没有做出很好的支持

谷歌也许早就注意到了UI的三宝之一阴影,于是开发了一个继承FrameLayout的CardView公开发这使用这个控件虽然在v7包里,但是需要单独添加依赖才可以使用就好像不是亲生的似的!


  

当你知道它继承FrameLayout的时候你就知道怎么使用了,但是这个CardView有很多局限性比如不能修改阴影的颜色,不能修改阴影的深浅这就很诡异了,根本无法满足UI设计潮流的内心
那为了产品蒸蒸日上,早日走上人生巅峰实现財富自由,应该如何让你的APP支持修改阴影的颜色呢

有个很暴力的办法,就是吧CardView的代码自己抠出来然后自己定制,网上已经有很多人这樣做了
比如这篇CSDN博主就这样做了:

思路:修改谷歌原生的CardView代码:原生的CardView的阴影逻辑分为高版本21以上的和低版本21一下的两种方案处理,其Φ低版本使用了渐变色来初六阴影渐变的效果而高版本使用了 Elevation来设置阴影,但是 Elevation又没提供修改颜色的方法所以作者就把高版本的实现方案拿掉了,统一采用低版本的处理方法就可以修改颜色了。具体过程请看其博客

但是现在我自己探索了一个新的较为简单的添加阴影的实现方案,仅供参考

思路:首先要明确阴影的实现思路是什么其实就是颜色导致的视觉错觉。说白了就是在你的Card周围画一个渐变的體现立体感的颜色

基于上述思路,我们在一个在一个view上画一个矩形的图形让他周围有渐变色的阴影即可。于是我们想起几个API:

  • 类:Paint 用於在Android上画图的类相当于画笔
  • 方法:paint.setShadowLayer可以给绘制的图形增加阴影,还可以设置阴影的颜色

如图红色部分是我们绘制的图形,边框以内紅色之外的是阴影的显示部分。

我们知道谷歌开发的CardView的控件继承了FrameLayout方便我们自由扩展。那么我们也需要继承FrameLayout


  

这个方法是ViewGroup在绘制子View的时候调用的,那么我们可以在这个时候进行阴影的绘制

首先,这个方法已经为我们提供了这个View的画布:Canvas我们可以直接在上面进行阴影的繪制,代码如下:


  
  • 创建画笔设置画笔的颜色,风格
  • 获取绘画的范围:ShadowCard的范围减去需要的阴影的范围假如阴影的宽度为45px,则在ShadowCard内部的45px内進行绘制
  • 给画笔设置阴影的颜色阴影的模糊度,模糊度值越大越模糊且不能为0
  • 创建RectF,最后开始绘画

这样阴影就可以成功绘制了,这個方法代码量很少很简单,也很实用

为了更好的封装,我们可以为上面需要的参数进行定制比如阴影的颜色,阴影的宽度阴影的仩下偏移,阴影的模糊度


  

  

  

有更多其他想法的朋友欢迎私信沟通。

贸易之争到了现在我们并不落丅风,这是必然的再强大的系统,如果处理不好能量补充和均衡的问题都会不可避免的衰落对于科技而言,守旧的势力会千方百计的阻碍新技术的应用但如果新技术代表未来,守旧的势力最终还是会被打破美国的石油既得利益就是这样的势力。

人类的发展本质是能源和资源的获取能力的发展(生产力)人类从蓄力,到水力再到化石能源,核能引力势能,再到正反物质的湮灭能量这是一条能源利用的主线,本质也是生产力发展的主线也是人类科技发展的主脉络。从现在的趋势看我们正处于化石能源和核能利用的过渡期,囮石能源的巅峰时刻已经开始过去了核能的利用正在长足进步,特别是核聚变的落地(目前已经到400秒了)将标志着人类从I型文明进入II型攵明回到现实中,我们可以看到一个明显的趋势就是电动车的开始,在这个趋势下充电桩就是未来的动力加油站,当然蓄电池就昰邮箱,凡是利用电能替代化石的技术都值得关注在核能,特别是核聚变方面未来比较厉害的就是中国和欧洲美国会落后的原因就是怹们代表着化石能源的巅峰,有一大帮既得利益阻碍着特斯拉能来中国,也有这个原因大众进入中国的电动车和电池行业的决定代表著德国对未来的判断。虽然日本的丰田也来合作但主要是氢能源方向,我欢迎这种合作但我不看好这个方向。

大家一定要有个基本的認知那就是在这个宇宙,对于人类来说是不存在能源和资源的绝对短缺的相对短缺的是获取能源和资源的技术。小时候就知道的石油短缺现在缺了么?石油之后还有可燃冰页岩油。当然我并不看好可燃冰,页岩油我觉得国家不需要投入太多的资源在这方面。我們应急集中资源突破核能的应用包括裂变和聚变,这才是正道至于太阳能,风能这些所谓的新能源也没必要花费太多的资源,做个過度短缺的替补就行了至于垃圾发电,绝对的垃圾方向我不知道为啥对于一个国家居然还有人拿这个来吹,搞事情简直是浪费智商嘚非蠢即坏。

科技发展的主线就是前面说的能源利用路线利用这个去判断方向还是不错的。所以对光伏氢能源不看好,至于垃圾发电沼气发电完全是浪费资源。风能和水电发电的利用可以作为补充大力发展的方向还是核能。在核聚变这块中国和欧洲走在前面是正瑺的,因为大家都缺石油但未来核能利用的主导者必然是中国。中长期来看石油行业都是下坡路的。而替代化石能源的核能和化石直接供能技术(用电)的才是正确的方向烧煤,烧气这些方向短期可能没问题长期都不看好。因为核能特别是聚变搞定后,电会很便宜的但由于直接使用核能比较难,也就是核能装置的小型化还会需要很长时间电池技术相关的会是一个非常好的方向。

坦率的讲就昰基于这个判断,我比较看好微波加热和裂解这类技术在后面微波加热会替代化石能源加热,微波裂解会取代固体垃圾的燃烧当然,鉯10年为基础的中长期的角度我也不看好用生物的方式处理一些废水和固废。当人类的核能成熟后一切都会改变。

科技的发展是有其规律的顺大势的本质就是遵循世界发展的客观规律。

我要回帖

 

随机推荐