5 张表的 sql 整懵阿里 p7:你们能看明白自己写的啥吗?

用户头像
小Q
关注
发布于: 2020 年 10 月 16 日

前言

“数据库是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内、有组织的、可共享的、统一管理的大量数据的集合。又可称为电子化文件柜。”

这是百度百科上关于数据库的定义。数据库其实就是一个存储数据的大仓库,它的存储空间很大,可以存储上百亿条数据。只不过在这个仓库中,数据是有规则的存储,就像图书馆一样。

但是,数据库再使用的同时,也有很多很神奇,让人哭笑不得事发生,比方说下面这位仁兄干的事

数据库开发规范

我不多说,就先给大家看一张图



5张表,各种的查询以及各种的LEFT JOIN,别不信,这套语句的来源是一个已经上线的项目,当我看到这张图的时候,我*******,无数的**从我的嘴里冒出来,我老天,我突然就想起来当年看过的阿里规范,多表联查的时候尽量不要超过三张表,但是还觉得跟闹着玩似的,现在我觉得我错了

他是真的有人能这么整啊,推荐大家看一下阿里开源的数据库开发规范

阿里数据库开发规范

oracle







mysql







需要这份阿里开发规范的,关注公众号:Java架构师联盟,每日更新技术好文

数据库优化

如果上面这个sql大家觉得还ok的话,那我们来看这个

如果业务代码中,有一个这样的需求需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下

SQL写法:

SELECT count(*) FROM table WHERE a = 1 AND b = 2


Java写法:

int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
  //当存在时,执行这里的代码
} else {
  //当不存在时,执行这里的代码
}


是不是感觉很OK,没有什么问题,但是,当你的数据量提升起来之后,再想一下,这个sql语句会是一个什么状态,count(*),这就是一个炸弹啊,这一个sql和上面的那套sql有异曲同工之妙啊,都是能把人整死的啊,来看一下这个优化方案

优化方案

推荐写法如下:

SQL写法:

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1


Java写法:

Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
  //当存在时,执行这里的代码
} else {
  //当不存在时,执行这里的代码
}


SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

业务代码中直接判断是否非空即可

总结

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

这里给大家分享一份DBA的开发笔记









需要这份阿里开发规范的,关注公众号:Java架构师联盟,每日更新技术好文

分布式数据库中间件

最后,给大家分享一份分布式数据库中间件

随着大数据时代的到来,海量数据存储、并行计算、异构数据互联等一系列新技术在市场上不断地涌现。相信数据库行业的很多从业者都对传统关系型数据库的单点故障及容量问题头疼不已,“分库分表”也早已成为解决这类问题的基础,此时,Mycat应运而生。

本书由资深Mycat专家及一线架构师、DBA编写而成。首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据中间件进行了对比,再围绕着如何利用Mycat 实现分布式数据库而展开。

无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理,还是对于资深IT人士来说,本书都极具参考价值。







需要这份阿里开发规范的,关注公众号:Java架构师联盟,每日更新技术好文



发布于: 2020 年 10 月 16 日 阅读数: 7
用户头像

小Q

关注

还未添加个人签名 2020.06.30 加入

小Q 公众号:Java架构师联盟 作者多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果能为您提供帮助,请给予支持(关注、点赞、分享)!

评论

发布
暂无评论
5张表的sql整懵阿里p7:你们能看明白自己写的啥吗?