找到了以之前零散记录的内容,然后稍微做整理,记录之
先捋清楚业务过滤条件,然后查看脚本中有没有做相关的过滤,同时不同的业务属性,会产生不同的结果,属性对应的结果需要捋清楚
业务属性很重要,哪些业务是要包含到,哪些是不被包含到的看懂数据库脚本
捋清脚本人的思路,先自己脑子里大概过一下,如果自己写,应该是怎么写-
数据库join中容易出错的地方
left join xx on yyyy and zzzz left join xx on yyyy where zzzz
这两个是有区别的,上面是先把xx中关于zzzz的过滤出来,下面是把join的结果中关于zzzz的过滤出来。
4.union 和 union all 的区别,两者造成的数据是有差别的
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序
5.局部看不明白的sql, 抠出来,然后用数据来验证不明白的地方,然后用数据来验证不明白的地方, 看是否符合预期
6.复杂的查询,可以修改select 后面的内容改为,然后以这样的结果进行验证(这样的数据会更直观),这种方式针对有group by的效果比较明显,去掉group by , 改成select , 有时候能很快发现问题
切记: 拆散的sql,记得最后在合起来再看下结果
7.考虑效率问题
先缩小数据范围,然后进行关联
通过explain来检查执行的情况
8.时间函数的使用
日期运算尽量不要用 CURDATE()-1类似,使用DATE_ADD函数
9.类似业务的sql, 如果发现这边有问题,务必要检查另外的地方有没有一并修正
10.设计到count或者sum等,检查有没有做ifnull处理,以免没有值的时候,程序出现异常
11.持续更新sql技能,学会写sql及复杂业务数据的熟练构造
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。