mysql数据库实战规范,面试 多线程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正文

c、主键的好处,就是更好的利用索引,提高查询效率。不明白原理,可以看老顾之前的文章

8、禁止使用外键,交给程序控制

这个是不是和我们理解的不一样,为什么不要外键?
外键会导致表与表之间耦合,这样更新操作都会涉及到相关联的表,十分影响sql的性能,且容易造成死锁。

9、禁止使用预留字段

很多小伙伴为了以后的业务扩展,都喜欢在表中建立类似DEMO_1、DEMO_2字段,列名没有任何业务含义,而且类型都是用String代替。
预留字段另一个好处就是业务改变后,利用预留字段,SQL语句不需要改变,其实这个问题用一些ORM工具就能够很好的解决

字段设计规范

1、优先选择符合业务的最小存储类型

可以有效节省数据库的空间,查询的时候也能够减少IO消耗

2、字段定义为Not Null,且提供默认值

null值的列,很难对索引优化
null的列对占用更多的空间,因为需要额外的空间来标识
null的查询操作,也过于麻烦,只能采用is null或is not null,而不能采用=、in、<、<>、not in 、!=操作符,如:where name!=‘laogu’,是不会查询出name为null的值的。

3、禁止使用Text、BLOB类型

Mysql内存临时表不支持Text、Blob类型,如果查询中包含这些类型,就不能使用内存临时表,而会采用磁盘临时表,导致性能很差
会浪费更多的磁盘和内存空间,导致数据库内存命中率低,影响数据库性能
如果一定要使用,建立单独的扩展表

4、禁止使用ENUM、可用Tinyint代替

修改Enum值时,需要使用alter语句
order by操作效率低

5、禁止使用小数

直接使用整数,小数容易有精度差异,导致金额对不上

6、使用Timestamp或Datetime类型存储时间

经常小伙伴们用String类型储存时间
缺点1:无法用日期函数进行计算比较
缺点2:用户字符串存储,占用更多的空间

索引设计规范

1、每张表索引不要超过5个
一般常识索引可以增加查询效率,但同样降低了插入和更新的效率

但针对查询,索引也不是越多越好。因为mysql优化器在选择如何优化查询时,会根据查询信息,对每一个用到的索引进行评估,以生成一个最好的执行计划,如果有很多个索引,就会增加mysql优化器的执行时间,反而降低了查询性能

2、区分度不高、更新频繁的列 不建议加索引

更新频繁会变更B+树,大大降低数据库的性能
区分度(区分度=列中不同值的数量/列的总行数),区分度不高(如:性别,只有男、女、未知)建立索引没有意义,性能和全表扫描差不多

3、联合索引时,把区分度高的放到最左侧
因为mysql的索引结构原理,联合索引有一个原则,就是最左索引原则

a、尽量把区分度高的放在联合索引的最左侧
b、把查询频繁的列放在最左侧
c、把字段长度小的放到最左侧,这样内存页存储数据量越大,IO性能越好

SQL开发规范

**1、禁止使用select * **
要用select 列名 代替 select *

原因:
1、消耗更多的CPU、IO开销
2、无法使用覆盖索引
3、可减少表结构的改动,带来的代码影响

2、禁止使用属性隐式转换

隐式转换会导致索引失效,如:select name from customer where id=‘1000’;
id为整型,正确的写法select name from customer where id=1000

3、建议使用预编译语句进行数据库操作

预编译语句可以重复使用优化计划,减少SQL编译时间,避免SQL注入

4、禁止使用不含字段的insert语句

如:insert into t_xxxx values(xxx,xxx,xxx)
应使用insert into t_xxx(c1,c2,c3) values(xxx,xxx,xxxx)
防止表结构变化

5、禁止负向查询,以及%开头的模糊查询

负向查询为:not、!=、<>、not in、not like等,会导致全表扫描
%开头也会导致全表扫描

6、一个SQL只能利用复合索引中的一列进行范围查询

如:有c1、c2、c3三个列建立联合索引,在查询条件中有c1列的范围查询,则在c2、c3列上的索引将不会被用到。如果一定要用c1做范围查询,那把c1列放到联合索引的最右侧

7、禁止在where条件上对属性使用函数或表达式

如:select id from t_order where from_unixtime(create_time) >= ‘20190101’
应改为
select id from t_order where create_time >= unix_timestamp(‘20190720’)

8、禁止大表使用join查询,禁止大表使用子查询

会产生临时表,消耗较多的内存、cpu资源,影响性能

9、避免使用JOIN关联太多的表

对于Mysql来说,是有关联缓存的,缓存的大小是由join_buffer_size参数进行设置
对于同一个SQL多关联一个表,就会多分配一个关联缓存,越多的join,就消耗越多的内存。
如果join_buffer_size设置不合理,就会导致数据库内存溢出,影响性能和稳定性

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

g-Xkpmjt57-1713641639770)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值