CTO 要我把这份 MySQL 规范贴在工位上!

NULL 这种类型 MySQL 内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多。

NULL 值需要更多的存储空,无论是表还是索引中每行中的 NULL 的列都需要额外的空间来标识。

【强制】:⑨禁用保留字,如 DESC、RANGE、MARCH 等

解读: 请参考 MySQL 官方保留字。

【强制】:⑩如果存储的字符串长度几乎相等,使用 CHAR 定长字符串类型

解读:能够减少空间碎片,节省存储空间。

【建议】: ⑪ 在一些场景下,考虑使用 TIMESTAMP 代替 DATETIME

解读:

这两种类型的都能表达"yyyy-MM-dd HH:mm:ss"格式的时间,TIMESTAMP 只需要占用 4 个字节的长度,可以存储的范围为(1970-2038)年,在各个时区,所展示的时间是不一样的。

而 DATETIME 类型占用 8 个字节,对时区不敏感,可以存储的范围为(1001-9999)年。

【建议】:⑫当心自动生成的 Schema,建议所有的 Schema 手动编写

解读: 对于一些数据库客户端不要太过信任。

SQL 规约

【建议】:①为了充分利用缓存,不允许使用自定义函数、存储函数、用户变量

解读:如果查询中包含任何用户自定义函数、存储函数、用户变量、临时表、MySQL 库中的系统表,其查询结果都不会被缓存。

比如函数 NOW() 或者 CURRENT_DATE() 会因为不同的查询时间,返回不同的查询结果。

*_【强制】:②在查询中指定所需的列,而不是直接使用“ ”返回所有的列_

解读:

读取不需要的列会增加 CPU、IO、NET 消耗。

不能有效的利用覆盖索引。

【强制】:③不允许使用属性隐式转换

解读: 假设我们在手机号列上添加了索引,然后执行下面的 SQL 会发生什么?

explain SELECT user_name FROM parent WHERE phone=13812345678;很明显就是索引不生效,会全表扫描。

【建议】:④在 WHERE 条件的属性上使用函数或者表达式

解读: MySQL 无法自动解析这种表达式,无法使用到索引。

【强制】: ⑤禁止使用外键与级联,一切外键概念必须在应用层解决

解读: 外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

【建议】:⑥应尽量避免在 WHERE 子句中使用 or 作为连接条件

解读: 根据情况可以选择使用 UNION ALL 来代替 OR。

【强制】:⑦不允许使用 % 开头的模糊查询

解读: 根据索引的最左前缀原理,%开头的模糊查询无法使用索引,可以使用 ES 来做检索。

索引规约

【建议】:①避免在更新比较频繁、区分度不高的列上单独建立索引

解读: 区分度不高的列单独创建索引的优化效果很小,但是较为频繁的更新则会让索引的维护成本更高。

【强制】:②JOIN 的表不允许超过五个。需要 JOIN 的字段,数据类型必须绝对一致; 多表关联查询时,保证被关联的字段需要有索引

解读: 太多表的 JOIN 会让 MySQL 的优化器更难权衡出一个“最佳”的执行计划(可能性为表数量的阶乘),同时要注意关联字段的类型、长度、字符编码等等是否一致。

【强制】:③在一个联合索引中,若第一列索引区分度等于 1,那么则不需要建立联合索引

解读: 索引通过第一列就能够完全定位的数据,所以联合索引的后边部分是不需要的。

【强制】:④建立联合索引时,必须将区分度更高的字段放在左边

解读: 区分度更高的列放在左边,能够在一开始就有效的过滤掉无用数据。提高索引的效率,相应我们在 Mapper 中编写 SQL 的 WHERE 条件中有多个条件时,需要先看看当前表是否有现成的联合索引直接使用,注意各个条件的顺序尽量和索引的顺序一致。

【建议】:⑤利用覆盖索引来进行查询操作,避免回表

解读: 覆盖查询即是查询只需要通过索引即可拿到所需 DATA,而不再需要再次回表查询,所以效率相对很高。

我们在使用 EXPLAIN 的结果,extra 列会出现:“using index”。这里也要强调一下不要使用“SELECT * ”,否则几乎不可能使用到覆盖索引。

【建议】:⑥在较长 VARCHAR 字段,例如 VARCHAR(100) 上建立索引时,应指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可

解读: 索引的长度与区分度是一对矛盾体,一般对字符串类型数据,若长度为 20 的索引,区分度会高达 90% 以上,则可以考虑创建长度例为 20 的索引,而非全字段索引。

例如可以使用 SELECT COUNT(DISTINCT LEFT(lesson_code, 20))/COUNT(*) FROM lesson;来确定 lesson_code 字段字符长度为 20 时文本区分度。

【建议】:⑦如果有 ORDER BY 的场景,请注意利用索引的有序性

ORDER BY 最后的字段是联合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort 的情况,影响查询性能。

解读:

假设有查询条件为 WHERE a=? and b=? ORDER BY c;存在索引:a_b_c,则此时可以利用索引排序。

反例:在查询条件中包含了范围查询,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b;索引 a_b 无法排序。

【建议】:⑧在 Where 中索引的列不能某个表达式的一部分,也不能是函数的参数

解读: 即是某列上已经添加了索引,但是若此列成为表达式的一部分、或者是函数的参数,MySQL 无法将此列单独解析出来,索引也不会生效。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

最后

为什么我不完全主张自学?
平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。

除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。

我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。

应该学哪些技术才能达到企业的要求?(下图总结)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

应该学哪些技术才能达到企业的要求?(下图总结)

[外链图片转存中…(img-0DN5ybHo-1713820848121)]

[外链图片转存中…(img-fO5pxKXn-1713820848121)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 51CTO是一家专注于IT技术领域的在线教育平台,在2016上半年的系统集成项目管理工程师考试中,出了一道题目。下面是这道题目的解析。 这道题目要求考生运用系统集成项目管理的知识进行解析。首先,我们需要明确系统集成项目管理的定义和目标。系统集成项目管理是指通过整合多个系统、子系统和组件,以满足用户需求并实现预期目标的过程。其目标是确保项目的顺利进行,包括项目进度、成本和质量的控制。 接下来,我们需要分析题目的要求。题目给出了一个案例,描述了一个参与系统集成项目的企业和关键人员。然后,题目要求考生回答三个问题:项目发起人应该具备哪些特点和能力?项目经理的核心职责是什么?在系统集成项目生命周期的不同阶段,项目经理应该做些什么? 对于第一个问题,项目发起人应该具备一定的专业知识和经验,能够准确把握用户需求,能够为项目提供必要的资源和支持,同时具备良好的沟通能力和领导能力,能够协调各方面的利益关系。 对于第二个问题,项目经理的核心职责是组织和管理整个项目团队,确保项目按照既定的计划和目标进行。项目经理应该制定项目的计划和目标,制定项目的时间表和里程碑,协调各个部门之间的合作,解决项目中出现的问题和风险。 对于第三个问题,项目经理在系统集成项目的生命周期的不同阶段应该做些什么呢?在项目启动阶段,项目经理应该制定项目的计划和目标,明确项目的范围和可行性。在项目执行阶段,项目经理应该组织和管理项目团队,监督项目的执行进度和质量。在项目收尾阶段,项目经理应该对项目进行总结和评估,确保项目的交付和验收。 综上所述,本题通过描述案例和提问的方式考察了考生对系统集成项目管理的理解和应用能力。考生需要结合系统集成项目管理的知识和方法进行分析和解答,并且举出合理的例子加以说明,以展现自己的理解和能力。 ### 回答2: 51CTO在2016年上半年的系统集成项目管理工程师试题解析可以从以下几个方面进行回答。 首先,该试题主要包含了系统集成项目管理的基本概念和方法论。通过这些试题,考生可以了解到系统集成项目管理的核心概念,如需求管理、进度管理、资源管理、风险管理等等,以及相应的管理方法和工具。 其次,该试题还涉及到了一些实际案例的分析和解决。这些案例可能是真实的项目问题,或者是模拟的项目场景,通过分析这些案例,考生可以锻炼自己的问题解决能力和决策能力,了解到项目管理实践中的挑战和解决方法。 此外,该试题还会考察考生对于相关法律法规的了解程度。系统集成项目管理不仅仅是技术和方法的应用,还需要考虑到法律法规的合规性和风险管理。因此,这些试题会考核考生对相关法律法规的了解程度,如信息安全管理、知识产权保护等。 最后,通过对该试题的解析,考生可以对自己的学习进度和能力进行评估,了解自己在系统集成项目管理领域的不足之处,进而针对性地进行学习和提升。同时,对于从事系统集成项目管理工作的人员来说,该试题解析也是一个很好的复习和巩固知识的机会。 总而言之,51CTO2016上半年的系统集成项目管理工程师试题解析不仅对于考生来说是一个检验自己学习成果的机会,也是一个提升自己技能的重要途径。通过分析解答这些试题,考生可以提高自己的问题解决能力、决策能力和对项目管理的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值