HiSEN

Personal Technology Blog


  • 归档

  • 分类

  • 标签

  • 书单

  • 关于

  • 搜索
close
HiSEN

MySQL查询违反最左匹配原则,但 explain 显示走索引的疑惑

发表于 2020-09-15 | 分类于 数据库 | 阅读次数

零、本文背景

有个朋友抛出一个问题,明显不符合最左匹配原则的 SQL,居然走索引了
兜兜转转,嘀咕了好几天,期间也和几个朋友讨论了一下
都没有结果,最后还是在 MySQL 的官方文档中找到了原因
记录下,也算是一次不错的探索。

一、问题描述

1.1 表结构

1
2
3
4
5
6
7
8
CREATE TABLE `people_new` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) NOT NULL,
`first_name` varchar(255) NOT NULL,
`bob` date NOT NULL,
PRIMARY KEY (`id`),
KEY `index_union` (`last_name`,`first_name`,`bob`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='人员-新'

1.2 数据

1
2
3
4
5
6
7
mysql> select * from people_new;
+----+-----------+------------+------------+
| id | last_name | first_name | bob |
+----+-----------+------------+------------+
| 1 | hisen | yuan | 2008-08-08 |
+----+-----------+------------+------------+
1 row in set (0.00 sec)

1.3 SQL 分析

可以看到 Using index
但是 possible_keys null 而 key 显示 index_union

1
2
3
4
5
6
7
mysql> explain select * from people_new  where bob = '2008-08-08' and first_name = 'yuan';
+----+-------------+------------+------------+-------+---------------+-------------+---------+------+------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+------------+-------+---------------+-------------+---------+------+------+----------+--------------------------+
| 1 | SIMPLE | people_new | NULL | index | NULL | index_union | 1537 | NULL | 1 | 100.00 | Using where; Using index |
+----+-------------+------------+------------+-------+---------------+-------------+---------+------+------+----------+--------------------------+
1 row in set, 1 warning (0.00 sec)

二、原因

阅读全文 »
HiSEN

软件工程师面试指引

发表于 2020-08-05 | 分类于 成长 | 阅读次数

零、关于面试

面试决定因子:70% 能力、20% 缘分、10% 行情。
软件工程师这条不归路,永远都走不到头,每天进步一点点,早日走上人生巅峰。

一、面经/知识点

仓库中的东西更多是抛砖引玉,提供业界比较通用/关注的技术,还得贴合自身需要深入去学习

基础指引:https://github.com/Snailclimb/JavaGuide
进阶之路:https://github.com/doocs/advanced-java
编程书籍:https://github.com/jobbole/awesome-programming-books
算法小抄:https://labuladong.gitbook.io/algo/
大厂试题:https://github.com/0voice/interview_internal_reference
简历打磨:https://github.com/geekcompany/ResumeSample/blob/master/java.md

后续持续更新,多交流,共同成长。

二、相关内容

计算机科学的自我修炼

三、更新记录

2020-12-18

阅读全文 »
HiSEN

王慧文(美团):很少人知道自己在愚昧之巅

发表于 2020-07-23 | 分类于 随说 | 阅读次数

零、写在前面

早几天在领导 JG 的朋友圈看到这篇文章
简单几个字的标题,让我产生了兴趣
一来这个标题是挺吸引人,典型的自媒体文章
二来JG 之前推过一些书很不错
三来一般领导朋友圈都不会推垃圾信息

全文看来其实感觉还是挺切合我的认知:

  1. 人很难认清自己,很难找到方向,成长路上有他人指点会很棒
  2. 除了遇到的人合读过的书,十年之后你还是你
  3. 多与他人交流,多帮助他人,利人利己
  4. 运动、学习、反馈、重塑大脑

离开学校
大部分时间都是围绕着工作
有些人可能觉得当前的工作不满意
然后想着学点什么高大上的东西为以后的工作做准备
极端情况下这种选择是对的,大部分情况会让自己进退两难
正确的选择应该是:过好当下,瞭望远方,持续学习,总结反思,慢慢进步
架构师同事 SGLS 说过:做好当下的事情才是最重要的,不管现在是做什么项目,设计和实现是我们自己可以控制的。

以下为原文

1
2
3
审视是一个特别好的词。当一个人开始审视世界、审视经历、审视自己的时候,更容易做出有担当的选择。
作为美团“二号首长”,王慧文选择在2020年底正式“退休”,这不可分说地成为了焦点——
王慧文,是怎么成为“王慧文”的?

一、“不自我设限”,造就无边界的王慧文

什么是促使人成长的本质原因?
王慧文一直在渴求突破,也一直在探究这个问题。

1. 人要接受变化,有动荡才有进化

王慧文修行的开端,就是校内网。
2006年3月,王慧文、王兴和另外四名同伴绞尽脑汁、黑白颠倒,终于让校内网收获了一百多万用户。
王兴开始四处找投资,但在多数投资人眼里看来,他们仍是群“生瓜蛋子”、“杂牌军”,校内网不过是几个大学生做的小打小闹的玩意儿。
但在这时,千橡集团董事长陈一舟出现了,他愿意拿出一千多万人民币,收购校内网。《九败一胜:美团创始人王兴创业十年》中这样描述

阅读全文 »
HiSEN

MySQL分页查询

发表于 2020-07-12 | 分类于 mysql | 阅读次数

零、分页查询

分页查询一般都会想到 offset limit

问题1

当不停机需要全量同步数据时
有可能会漏掉或者重复处理很多数据
因为中途会有数据改动
每次分页内的数据与预期的会有出入

问题2

offset 会进行全表扫描

一、推荐方案

通过不变的字段进行排序
最好是使用递增的主键索引

1
2
3
4
5
select *
from hisen
where id > ${lastId}
order by id
limit ${pageSize};

二、参考

阅读全文 »
HiSEN

关于部署软系统的思考

发表于 2020-06-27 | 分类于 soft | 阅读次数

在 敏捷 + devops 盛行的年代
软件部署的频率一般都比较高,一周一迭代、一周两迭代
这就需要有良好的工具来支持,更需要良好的机制来避免人为犯错

工作当中会遇到很多部署导致的问题
其中大部分的问题原因是配置问题

关于部署

  1. 开发的时候记录大致改动点
  2. 上线之前按检查列表(团队或个人定义一些常规检查项目)挨个检查
  3. 上线之前写上线步骤列表,部署时做一个人肉机器人,按步骤操作即可
  4. 上线之前写好验证步骤,验证需要的各种权限
  5. 以上做完了最好找相关人员核对一遍,以免遗漏(互备很重要)
  6. 灰度发布(应用启动期间性能抖动问题值得研究)

互备很重要,哪怕对方没有介入开发,简单的按正常流程问你几个问题,也许就会发现漏了什么。

HiSEN

赢得财富:用独到的知识/责任感/杠杆

发表于 2020-05-17 | 分类于 随说 | 阅读次数

零、读后感

美国风险投资家 Naval Ravikant 通过一个很长的推特阐明了他的商业观,感觉挺精辟。
积累独到的知识(无法批量复制的),为社会提供他们需要的。
财富不是靠出卖时间获得,应该通过杠杆(资本、人力、一本万利的工具<写书等>)去积累。
选择一个可以长期从事的行业,寻找一批可以长期共事的人。

一、原文(及翻译)

  1. Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.

    去寻求财富,而非金钱或地位。财富就是你拥有资产,而资产在你睡觉的时候都还在为你赚钱;金钱是我们转换时间和财富的工具;身份是你在社会等级体系里所处的位置。

  2. Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you.

    要明白一件事:一个人完全可以不靠坑蒙拐骗站着赚取财富。如果你在暗中鄙视财富,那么财富也会躲着你。

  3. Ignore people playing status games. They gain status by attacking people playing wealth creation games.

    别去理会那些热衷于玩身份游戏的人,他们通过攻击那些创造财富的人以获得自己的身份。

  4. You’re not going to get rich renting out your time. You must own equity — a piece of a business — to gain your financial freedom.

    你不会通过出租自己的时间而变得富有。你必须拥有产权,也就是生意的一部分,以此才能赢得个人财务自由。

阅读全文 »
HiSEN

Java 反序列化漏洞

发表于 2020-05-10 | 分类于 java | 阅读次数

微博目前关注了好几个做安全的大佬
不要问我为什么关注
问就是想观摩下有钱人的微博!

其中有一个经常发 Java 相关的内容
今天看到一个稍微熟悉一点关于 FastJson 漏洞

窃以为Fastjson入门的最佳篇章非Mi1k7ea这个系列莫属,郑重推荐: Mi1k7ea。
共有5篇,从第3篇开始,成体系地由旧到新展示了1.2.25之后各版本的补丁绕过,
直至思路惊艳的1.2.47绕过方案及1.2.48的修补方案,相当完备。
可以看出此君是动手实践派、整理归纳派,要我说,新学东西时就得这套路,无它。

今天看了这两篇文章,不得不说对 Java 是异常的熟悉。
想做好安全,想必要对用的东西了如指掌,知道坑在哪里,怎么填坑。

  • Java反序列化漏洞
  • Fastjson系列一 反序列化漏洞基本原理
阅读全文 »
HiSEN

开源画图工具(各种图):draw.io 支持 Web、macOS、Windows、Linux

发表于 2020-04-06 | 分类于 soft | 阅读次数

draw.io 一个很棒的开源画图工具,可以导出 xml、pdf、html、png 等各种格式
其实重点是开源,目前好几个地方看到有在用,之前用网页版,现在用桌面版多些

网页版:draw.io
桌面版:github 下载支持:Windows、macOS、Linux、Google Chrome OS

HiSEN

Java 日志配置文件 - self4j 之 logback 和 log4j

发表于 2020-04-06 | 分类于 java | 阅读次数

写这种博客总感觉很低级
但是不得不承认自己从来没有认真的了解过打日志这件事
这里开个头,先从常见的日志配置文件开始,后续再深入了解

“I wish i had” vs “I’m glad i did”
人生会不会留下遗憾,在 20 年之后的这两句话中就能看出。
希望 20 年后的自己,能够很自豪的说:I’m glad i did.

一、self4j

这是一个只定义了标准的日志组件

二、logback

常见配置:logback.xml

阅读全文 »
HiSEN

找到好的学习方法

发表于 2020-02-26 | 分类于 随说 | 阅读次数

时间是公平的,对每个人都一样,不同之处在于每个人单位时间的产出值会有差异。
一直在寻找适合于自己的学习方法以提高时间的利用效率,以便不影响诗和远方==
奈何目前也没有太多满意的答案,或许生命的意义就是在于探索未知而又刺激的世界。
分享一些文字,提到了一些好的学习方法,抛砖引玉,共勉。

《贫穷的本质》告诉我们,贫穷的本质是认知。其实很多时候真的是认知,方法论决定了一个人可以走多远。

《刻意练习》原地踏步的练习是没意义的,大众眼里一万小时定律基本上是错误的,需要的是有进步练习;

《学习之道》十个不错的方法:运用回想、知识组块、简化类比、方法交替、间隔重复、注意休息、心理对照、自我测试、保持专注、困难先行;

《如何阅读一本书》里面有提到主题阅读,不同的人对同一主题会有不同的看法,可以对比吸收;

《程序员的职业素养》有提到卡塔练习,提高我们的肌肉反应,让写代码像聊天打字一遍的顺畅;

早些天看到一篇不错的帖子
对我感触最深的就是:4
标题:如果高效学习有什么秘诀的话,那就都在这里了:)

阅读全文 »
123…23
hisenyuan

hisenyuan

Java R & D

230 日志
27 分类
100 标签
GitHub Weibo
Links
  • 科技爱好者周刊
  • 美团技术团队
  • duanple(老师木)
  • 当然我在扯淡(王垠)
  • 段永平的博客
  • 梦殇国际
© 2016 - 2021 hisenyuan
由 Hexo 强力驱动
您是第  个访问者    |   
主题 - NexT.Mist