【数据库设计和SQL语法的基础知识】--注意事项--语句设计--统计类语句

2024-01-10 10:34:31 浏览数 (3)

根据实际应用场景划分,SQL语句可分为统计类、查询类、更新类等不同类型。在语句设计中,核心关注点是优化执行效率,旨在降低语句执行耗时,并最小化对CPU、内存、I/O以及网络带宽等资源的消耗。为提高效率,通常采用一系列手段,包括充分利用索引、缩小操作粒度、简化操作复杂度等。下面我们先来看一下统计类语句的注意事项。

一、统计类语句
  1. count()的不同用法:
    • count(*): 对应用优化,仅进行行累加,不取全部字段值,无论是否包含null。
    • count(主键id): 对InnoDB引擎而言,遍历整张表取出每行id值,由于主键不为空,按行累加。
    • count(1): InnoDB引擎遍历整张表,不取值,但对于每一行返回填充数字1,实际按行累加。
    • count(字段): 如果字段定义为not null,实际按行累加;如果允许为null,额外判断只累加非null的行。
    • count(distinct col): 计算该列除null之外的不重复数量,例如,count(distinct col1, col2)。
    • 注意:
      • 统计表中记录数时,优先使用count(*),因为它是SQL92标准的统计行数语法,与具体数据库无关。
  2. sum()的用法:
    • sum(col): 当某一列的值全为null时,count(col)返回结果为0,而sum(col)返回结果为null,需注意空指针异常(NPE)问题。
  3. group by的使用:
    • 基本规则:
      • 在select后的列中,所有未使用聚合函数的列必须出现在group by子句中。
      • 例如:select point, count(id) from t_table group by point,point列未使用聚合函数,必须在group by子句中出现。
    • 与order by的结合使用:
      • group by与order by联合使用时,order by要位于group by之后。
      • order by子句中的列必须包含在聚合函数或group by子句中。
二、总结

SQL语句根据应用场景可划分为统计、查询、更新等类型,着重在设计中优化执行效率,降低耗时及资源消耗。采用手段包括索引充分利用、操作粒度缩小、复杂度简化。在统计类语句中,count()有多用法,推荐优先使用count(*)。sum()需注意空指针异常。group by与order by联合使用时,遵循列出现规则。这些注意事项有助于提高SQL查询效率。

0 人点赞