0%

前提知识

Mysql中有专门负责优化 SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的 Query提供他认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为是最优的)

当客户端向 MySQL请求一条 Query,命令解析器模块完成请求分类,区别出是 SELECT并转发给 MySQL Query Optimizer时, MySQL Query Optimizer首先会对整条 Query进行优化,处理掉一些常量表达式的预算直接换算成常量值。并对 Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析 Query中的Hint信息(如果有),看显示Hint信息是否可以完全确定该 Query的执行计划。如果没有Hint或Hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据 Query进行写相应的计算分析,然后再得出最后的执行计划。

MySQL索引优化

本文主要讲述了索引的概念,索引的作用是什么,MySQL索引结构,哪些情况下需要建立索引,哪些情况下需要建立索引!MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

现在开始学习MySQL高级部分的知识,比如MySQL内核、SQL优化、SQL服务器的优化、各种参数常亮的设定、查询语句优化、主从复制、软硬件升级、容灾备份、SQL编程之类的东西。不过接下来学到的呢只是作为一个后台Java开发者应该掌握的知识,很完整的SQL优化需要很深的功底,大公司甚至有专门的DBA写上面这些东西,从IT时代到互联网时代,不断增长的是数据,所以学习一下MySQL优化还是很重要的!

再谈谈数据库优化

如图,MySQL优化呢无非就是从这几个方面入手,第一是数据库设计,第二是SQL优化!但是随着数据表的增长,数据会越来越多,通过MySQL优化是可以解决部分性能问题的,但是一台服务器的资源是有限的,无论怎么优化始终无法解决MySQL的性能瓶颈问题。

mark

一、解决问题

最近在使用Thymeleaf模板引擎,但是遇到的问题就是我现在有这样一个标签:输入类型是date,我现在要把JavaBean中的java.sql.Date数据放置到这个额输入框中,但是如你上图所见,这个输入框根本不是单纯的文本框,而且一个日期选择框,好吧….我尝试过th:datetime 但是不行,即使是按照格式化的方式也是不行,就像这样的:

1<input type="date" th:value="${
2#dates.format(company.companyRegdate, 'yyyy/MM/dd')}"/>
3<input type="date" th:value="${company.companyRegdate}"/>

果然还是不行,于是卡了半天的stackoverflow终于出来了:

1@DateTimeFormat(pattern = "yyyy-MM-dd")
2private Date companyRegdate;
3
4@DateTimeFormat(pattern = "yyyy-MM-dd")
5private Date companyUnregdate;
6
7@DateTimeFormat(pattern = "yyyy-MM-dd")
8private Date companyUpdatedate;

这里推荐的方式就是给JavaBean的属性上注解一个时间日期格式化器,对的,这个很容易理解,我们所看到的日期不过是像2018/01/01这样的字符串,或者说像2018年1月1日 这样的字符串,我们和老外对时间的格式表示当然会不一样,但是这个世界上统一的时间就是时间戳,所有的时间表示都是通过时间戳转换而来的。所以我们在存储Date时其实保存的是时间戳的数值,至于具体显示出来时间是怎么样的,要看格式化串,就好比一个模板,所以这个解决方式还是很靠谱的!果断改成@DateTimeFormat,哈哈,还是经验不足呀!

Dockerfile

什么是Dockerfile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。通俗的理解,和Maven一样,只需要写好pom文件就可以定义整个工程的构建,DockerFile是一样的,通过这个脚本可以构建出自己想要的容器!

Docker镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录