ITPub博客

首页 > 数据库 > 数据库开发技术 > 肉眼可以识别的差SQL

肉眼可以识别的差SQL

原创 数据库开发技术 作者:xuexiaogang 时间:2022-05-13 09:38:31 0 删除 编辑

我自己公众号原文: https://mp.weixin.qq.com/s/P-hOuC6fWEauGflF0GAgTg

有时候别人问我,你能一眼看出SQL的好坏吗?我不敢说100%能确定,但是能确定的都是100%的不好。那么靠的是什么?根据经验来说符合下面的规则的,通常来说是不好的。

1、没有where 条件

2、Select的列超过50列

3、SQL中存在标量子查询

4、SQL谓词过滤中仅含有!=或<>或or操作符

5、SQL谓词过滤中对字段进行null值判断作为业务逻辑

6、SQL谓词过滤中仅含有notin,not exist

7、SQL谓词过滤中仅含有前后%

8、SQL谓词过滤中=”左边进行函数、算术运算或其他表达式运算。

9、SQL谓词过滤中非唯一查询的场景中无时间限定或分页限定。

10、         SQL谓词过滤中仅有状态、等区别度较低的字段

11、         SQL谓词过滤中时间范围过大或者缺失上下限之一

12、         SQL谓词过滤中范围查询没有分页

13、         SQL谓词过滤中无意义排序

14、         多表关联列非索引列

15、         多表关联,关联列类型转换

16、         多表关联时,select的列只用到其中一个表

17、         多表关联时,select的列只来自多表,但是大部分表只贡献1-2列

18、         多表关联时,谓词中涉及多表的过滤条件,但是这些条件通常只为状态等无效过滤条件

19、         关联表超过5个(MySQL超过3个)

20、         Select没有绑定变量(Oracle)

21、         绑定变量过多超过50个(Oracle)

22、         对CLOB和BLOB进行模糊查询

23、         SQL中出现对log表、tmp表,接口表,历史表进行关联和判断

24、         多表关联笛卡尔积

25、         SQL中出现全角半角,大小写等判断

26、         In 超过100个

27、         子查询超过2个

28、         子查询和父查询存在嵌套

29、         拼接字段作为谓词充当过滤条件

30、         排序计算count

31、         分组维度超过2个

32、         非时间范围的分组sum,count


可能存在一点争议,但是可以说如果都做到禁止以上,那么数据库的负荷绝对很低。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2893864/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953426