华企号 企业信息化 SQL语句的注意事项讲解

SQL语句的注意事项讲解

  • 不使用 count(列名)或 count(常量)来替代 count(*)
    count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行
  • 当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为NULL,因此使用 sum()时需注意 NPE 问题
    避免 sum 的 NPE 问题:SELECT IFNULL(SUM(column), 0) FROM table;
  • 使用 ISNULL()来判断是否为 NULL 值
    ISNULL(column)`是一个整体,简洁易懂。性能 更好。
  • 代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句
  • 不得使用外键与级联,一切外键概念必须在应用层解决
    外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
  • 禁止使用存储过程,存储过程难以调试和扩展,更没有移植性
    存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
  • 对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或表名)进行限定
    举例:select t1.name from table_one as t1 , table_two as t2 where t1.id=t2.id;
  • in 操作能避免则避免,要使用的话,需要仔细评估 in 后边的集合元素数量,控制在 1000 个之内
  • 字符存储与表示,要采用 utf8 字符集,那么字符计数方法需要注意
    SELECT LENGTH(“世界你好”); 返回为 12
    SELECT CHARACTER_LENGTH(“世界你好”); 返回为 4
    如果需要存储表情,那么选择 utf8mb4 来进行存储,注意它与 utf8 编码的区别。
  • TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE无事务且不触发 trigger,有可能造成事故,故不建议在开发代码中使用此语句

作者: 华企网通李铁牛程序员

我是程序员李铁牛,热爱互联网软件开发和设计,专注于大数据、数据分析、数据库、php、java、python、scala、k8s、docker等知识总结。15889726201 我的座右铭:"业精于勤荒于嬉,行成于思毁于随"
上一篇
下一篇

发表回复

联系我们

联系我们

028-84868647

在线咨询: QQ交谈

邮箱: tech@68v8.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部