文档中心MogDBMogDB StackUqbar
v3.1

文档:v3.1

支持的版本:

其他版本:

语法规范

关于NULL

  • 说明:NULL的判断:IS NULLIS NOT NULL

  • 说明:注意boolean类型取值truefalseNULL

  • 说明:小心NOT IN集合中带有NULL元素。

  • 建议:使用count(1)count(*)来统计行数,而不建议使用count(col)来统计行数,因为NULL值不会计入。

  • 规则:count(多列列名)时,多列列名必须使用括号,例如count( (col1,col2,col3) )

  • 注意:多列的count,即使所有列都为NULL,该行也被计数,所以效果与count(*)一致。

  • 注意:count(distinct col)计算某列的非NULL不重复数量,NULL不被计数;count(distinct (col1,col2,...) )计算多列的唯一值时,NULL会被计数,同时NULLNULL会被认为是相同的。

  • 注意:NULLcountsum

    select count(1), count(a), sum(a)  from (SELECT * FROM (VALUES (NULL), (2) ) v(a)) as foo where a is NULL;
    count | count | sum
    -------+-------+-----
       1 |   0 |
    (1 row)
  • 判断两个值是否相同(将NULL视为相同的值)

    select null is distinct from null;
    ?column?
    \---------
    f
    (1 row)
    
    select null is distinct from 1;
    ?column?
    \---------
    t
    (1 row)
    
    select null is not distinct from null;
    ?column?
    \---------
    t
    (1 row)
    
    select null is not distinct from 1;
    ?column?
    \---------
    f
    (1 row)

关于索引失效

  • 在书写SQL语句时经常会在查询中使用函数及表达式,建议尽量不要在条件列上使用函数及表达式。在条件列上使用函数或者表达式的时候会导致使用不上该条件列上的索引,从而影响SQL的查询效率。尽量把函数或者表达式用在条件值上,避免使用在条件列上。示例:

    select name from tab where id+100>1000;

    可以改写为如下形式:

    select name from tab where id>1000-100;
  • 查询语句中尽量不要使用左模糊查询。示例:

    select id from tab where name like '%ly';
  • 查询中尽量不要使用负向查询,如not in/like,示例:

    select id from tab where name not in ('ly','ty');

确保使用到所有变量和参数

  • 声明变量也会产生一定的系统开销,并会显得代码不够严谨,在编译时未使用的变量会有告警,需修改以确保没有任何告警。
Copyright © 2011-2024 www.enmotech.com All rights reserved.