技术站最全MySQL数据库实战规范(1)

修改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 txxxx values(xxx,xxx,xxx) 应使用insert into txxx(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 torder where fromunixtime(createtime) >= ‘20190101’
应改为
select id from torder where createtime >= unixtimestamp(‘20190720’)

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

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

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

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

10、禁止使用OR条件,必须改为IN查询

绝大多数情况下,Mysql的OR查询是不能命中索引的。

11、尽量减少与数据库的交互次数

能够一次性读取尽可能多的数据,减少和数据库的交互,可以极大提升数据库的吞吐量。

12、禁止使用order by rand()进行排序

会把表中的所有数据都加到内存中,然后在对内存的数据进行随机排序,会消耗较多的CPU、IO以及内存资源
推荐在程序中生成一个随机值,传给数据库的方式。

总结

上面有很多规范,也许小伙伴一时间记不住,慢慢练习就会越熟练。老顾这里给大家分享一个索引口诀,方便记忆。

索引优化口诀
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难!

以上MySQL数据库实战规范你都了解了吗?记住了吗?记不住还不快点个收藏点个赞→_←

关注我,还有更多技术干货分享~

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

(img-HkyiTxcT-1714713741490)]

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值