前言

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

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

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

数据库开发规范

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



sql server 如何逗号连接字符串 concow sql逗号是什么连接_数据


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

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

阿里数据库开发规范

oracle


sql server 如何逗号连接字符串 concow sql逗号是什么连接_SQL_02


sql server 如何逗号连接字符串 concow sql逗号是什么连接_分布式数据库_03


sql server 如何逗号连接字符串 concow sql逗号是什么连接_数据_04


mysql


sql server 如何逗号连接字符串 concow sql逗号是什么连接_分布式数据库_05


sql server 如何逗号连接字符串 concow sql逗号是什么连接_分布式数据库_06


sql server 如何逗号连接字符串 concow sql逗号是什么连接_分布式数据库_07


需要这份阿里开发规范的,关注+转发后,私信“阿里”即可查看获取方式

数据库优化

如果上面这个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,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

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

总结

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