一切福田,不離方寸,從心而覓,感無不通。

Mysql中的force index和ignore index

前几天统计一个sql,是一个人提交了多少工单,顺便做了相关sql优化。数据大概2000多w。

为了实验最少受其他因素干扰,将生产库的200多w数据导出来,用测试服务器进行测试。 导出来的数据是一个堆表,没有主键,没有索引。

 1.堆表的情况 这时候就在这时候,用执行计划分析下语句。

select_type的值为SIMPLE,表示简单的select查询,不使用union或子查询。 type的值为ALL,表示要对表进行表扫描。 possible_keys 表示能使用哪个索引找到行记录。 key 表示Mysql决定使用的索引(键)。 key_len 表示Mysql决定使用索引的长度。 ref  表示使用哪个列和key一起从表中选择行。 rows 表示Mysql认为它执行查询时必须检查的行数。 extra 表示查询的详情信息,用到where,临时表,排序。   执行下该语句三次,发现执行了16.30 sec、16.34 sec、16.24 sec。  2.有索引的情况 建了四个索引,分别以custname,CreateDate建两个单列索引,另外两个是联合索引,只是最左边列不一样。

之后,用执行计划分析下sql查询语句。

从执行计划可以看出,Mysql从四个索引中选取了ix_datename这个索引,type为range表示索引范围扫描。rows的数量值是没堆表的1/3。 执行语句三次,时间是 8.64 sec、8.61sec、8.55 sec。   我建了三个索引,那么我想用下另外三个索引怎么办? 这里可以用force index(),这个指令可以指定本次查询强制使用哪个索引,因为Mysql优化器的选择并不是最优的索引。

 选用另一个联合索引 ix_namedate,这次type变为index,可以这样理解,根据索引的顺序进行全表扫描,比ALL效率要高些,rows的值和堆表的值差不多。 执行语句三次,时间是 7.84 sec、7.92 sec、7.84 sec。  

  选用另一个联合索引 ix_name,这次type是index,可以这样理解,根据索引的顺序进行全表扫描,比ALL效率要高些,rows的值和堆表的值差不多。 执行语句三次,时间是 1 min 28.17 sec、1 min 27.64 sec、1 min 27.58 sec。  

选用另一个联合索引 ix_date,这次type是range,表示索引范围扫描,rows的值是堆表的1/3多些 。 执行语句三次,时间是 9.55 sec、9.52 sec、9.39 sec。   假如我不想用索引了怎么办? 可以使用ignore index(),这个指令可以强制Mysql在查询时,不使用某索引。  

上面第一个强制不使用ix_date索引,那么就Mysql就从剩下的三个索引中,选取他认为是最优的索引。第二个时将四个索引都不使用,那么Mysql就进行全表扫描了。     总结:       1.Mysql的语句优化,没有绝对的正确,explain也只是给出个大致的方向,例如 key_len值小的,rows小的按理说,时间应该最短,效率最高。但是,实验中时间最少的却不是那个值最小的。        2. 优化还需根据实际数据情况,例如,假如我where选取的时间范围变化,或者说CustName的分布有些变化,可能跟刚才的实验,又会产生一定偏差。        3. 同样我还实验了,当给表加上主键时,整体的查询时间会缩短些。 […]

龙生   22 Oct 2021
View Details

idea报错Cannot compile Groovy files: no Groovy library is defined for module 'xx’之方

0、病因描写 clone 原有的项目(新建的项目一般不会有) IntelliJ IDEA 关联了后缀为groovy的文件但是没有配置Groovy的library。 1、病因一之解决方法 病因:本项目不需要用的Groovy但是关联了groovy了文件 方子:那直接去掉后缀为groovy的关联即可 结果:良好,网上基本都是这种方子 如图:去掉红框部分并apply 2、病因二之解决之法 病因:项目需要groovy的library。 方子:那就是配置groovy的library咯。 步骤: ①、下载groovy library ②、解压(选一个中意的目录,最好目录路径是全英文的) ③、配置groovy library:File —>Project Structure —> Modules —> Groovy —> Add Groovy Support —> 选择 Groovy library 最后 apply就OK了。 如图: 快捷配置入口:如果IDEA有如下提示就最好了–方便。直接点击 Configuration Groovy SDK 即可。   from:https://www.2cto.com/kf/201803/732193.html

龙生   21 Oct 2021
View Details

阿里巴巴10个顶级开源项目,确定不来看看?

一、创作由来 Hello 大家好,我是l拉不拉米,今天给大家分享10个阿里巴巴开源的顶级项目,都是Java开发必备利器。 这10个项目均来自Github上阿里巴巴公开的开源项目。 都是java3c在工作中用过或者之前学习过的项目,也有写过个别项目的文章,但是从没有整理到一起过。周末花了大概半天的时间,一一整理出来,方便大家阅读学习。 阿里巴巴的github地址 二、项目介绍 1、arthas 截至目前,github上有27.4k个星和6k的fork,是阿里巴巴最受欢迎的开源项目。 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas 提供管理界面在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。 Github: github.com/alibaba/art… 文档: arthas.aliyun.com/doc/ 超过120家公司登记了使用: 2、p3c p3c是阿里巴巴开发的Java规约检查插件,可以继承到idea和eclipse中。 相信不少搞Java开发的同学都了解过阿里巴巴出品《Java开发手册》,主要整理了阿里内部使用的Java开发的规范。 p3c插件实现了开发手册中的的53条规则,大部分基于PMD实现,其中有4条规则基于IDEA实现,并且基于IDEA Inspection实现了实时检测功能。部分规则实现了Quick Fix功能(快速修复)。 目前插件检测有两种模式:实时检测、手动触发。 主要功能一览: 3、druid Druid 是一个 JDBC 组件库,与c3p0、dbcp齐名,包含数据库连接池、SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过最严苛线上业务场景考验。 Druid连接池 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。 Github项目地址 github.com/alibaba/dru… 文档 github.com/alibaba/dru… 下载 repo1.maven.org/maven2/com/… 监控DEMO http://120.26.192.168/druid/index.html 竞品对比 4、fastjson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 fastjson的优点 1、速度快 fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。 2、使用广泛 fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。 3、测试完备 fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。 4、使用简单 fastjson的API十分简洁。

5、easyexcel EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百万行级别的Excel。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。 举个例子:64M内存1分钟内读取75M(46W行25列)的Excel 还有极速模式能更快,但是内存占用会在100M多一点。 6、canal 阿里巴巴 MySQL binlog […]

龙生   20 Oct 2021
View Details

18 个杀手级 JavaScript 单行代码

1、复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本复制到剪贴板。

  2、检查日期是否有效 使用以下代码段检查给定日期是否有效。

  3、找出一年中的哪一天 查找给定日期的哪一天。

  4、将首字符串大写 Javascript 没有内置的大写函数,因此我们可以使用以下代码。

  5、找出两日期之间的天数 使用以下代码段查找给定 2 个日期之间的天数。

  6、清除所有 Cookie 你可以通过使用 document.cookie 访问 cookie 并清除它来轻松清除存储在网页中的所有 cookie。

  7、生成随机十六进制 你可以使用 Math.random 和 padEnd 属性生成随机十六进制颜色。

  8、从数组中删除重复项 你可以使用 JavaScript 中的 Set 轻松删除重复项。

  9、从 URL 获取查询参数 你可以通过传递 window.location 或原始 URL goole.com?search=easy&page=3 从 url 轻松检索查询参数

  10、从日期记录时间 我们可以从给定日期以小时::分钟::秒的格式记录时间。

  11、检查数字是偶数还是奇数

  12、求数字的平均值 使用 reduce 方法找到多个数字之间的平均值。

  13、反转字符串 你可以使用 split、reverse 和 join 方法轻松反转字符串。

  14、检查数组是否为空 检查数组是否为空的简单单行程序将返回 true […]

龙生   20 Oct 2021
View Details

NuGet修改默认包保存的位置

NuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages     修改方法:  

  from:https://www.cnblogs.com/sword88/p/11490304.html

龙生   19 Oct 2021
View Details

springboot整合mongodb,并配置账户名和密码登录验证

springboot pom.xml加入依赖

application.yml加入连接信息 mapper编写

Application启动添加注解

application.yml配置,这里之前碰到一个坑,mongodb的配置没有写host和port属性,只写了database和uri,这种方式在无密码验证的情况下,可以连接mongodb。但是在mongodb设置了密码登录后,就无法连接,一直提示 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert 这里我们说下,application.yml关于mongodb的两种配置 第一种,yml方式,注意这里的host port username password database,每个属性都要配置。

  第二种,uri方式

  之前就是配了如下的参数,导致一直出错,还以为是mongodb的用户权限配置出错导致,原来是配置文件出错,报错信息 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert

  from:https://www.it610.com/article/1283088113266081792.htm

龙生   18 Oct 2021
View Details

用docker部署RabbitMQ环境

前置条件: 已经安装好docker 1.查找镜像(有2种方式) ①登录rabbitmq官网找到docker镜像,选择想要的镜像的tag https://www.rabbitmq.com/download.html https://hub.docker.com/_/rabbitmq 如果需要访问web管理页面,就选择tag为management的 ps:带有alpine的是用最小linux镜像构建的,体积最小可以达5M初学者不建议这么折腾,而且 Alpine Linux使用了muslmusl实现的DNS服务不会使用resolv.conf文件中的search和domain两个配置,通过DNS来进行服务发现时需要注意。,带有-management的是带有web控制台   ②直接用docker search 搜索,默认下载标签为latest的镜像(无法打开web管理页面)

ps:如果是普通用户登录,需要sudo,不然会提示错误

2.下载镜像(有时候网络问题超时,多尝试几次即可。我这里选择的是可以访问web管理界面的tag)

3.创建容器并运行(15672是管理界面的端口,5672是服务的端口。这里顺便将管理系统的用户名和密码设置为admin admin)

  from:https://www.cnblogs.com/yy-cola/p/11089800.html

龙生   18 Oct 2021
View Details

centos文件解压缩7z

1.7z 安装

压缩test文件夹生成test.7z

  解压test.7z

  from:https://www.cnblogs.com/yy-cola/p/10971610.html

龙生   18 Oct 2021
View Details

CentOS "Peer’s Certificate has expired" 问题

转载自:https://www.jianshu.com/p/64b75ae20750 在操作CentOS的时候发现下载软件,安装软件出现了标题中的错误。经排查,发现系统的时间与真实生活中的时间有偏差。 现在:2018-8-15 21:36:00 系统:2018-8-14 08:16:17 总之就是系统时间与现在的时间不一致。 方案 1、安装时间同步软件

2、同步时间,ntp的服务器可以自己搜索,国内应该也有相应的服务器

3、查看当前的系统时间是否正确

然后就不报这个错误了   from:https://www.cnblogs.com/lxmzq/articles/12532502.html

龙生   14 Oct 2021
View Details