暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

引用文档丨SQL 开发规范

PingCAP 2023-08-31
130
本章将介绍一些使用 SQL 的一般化开发规范。

建表删表规范

  • 基本原则:表的建立在遵循表命名规范前提下,建议业务应用内部封装建表删表语句增加判断逻辑,防止业务流程异常中断。
  • 详细说明:create table if not exists table_name 或者 drop table if exists table_name 语句建议增加 if 判断,避免应用侧由于 SQL 命令运行异常造成的异常中断。

SELECT * 使用规范

  • 基本原则:避免使用 SELECT * 进行查询。
  • 详细说明:按需求选择合适的字段列,避免盲目地 SELECT * 读取全部字段,因为其会消耗网络带宽。考虑将被查询的字段也加入到索引中,以有效利用覆盖索引功能。

字段上使用函数规范

  • 基本原则:在取出字段上可以使用相关函数,但是在 Where 条件中的过滤条件字段上避免使用任何函数,包括数据类型转换函数,以避免索引失效。或者可以考虑使用表达式索引功能。

  • 详细说明:

    不推荐的写法:

    SELECT gmt_create FROM ... WHERE DATE_FORMAT(gmt_create, '%Y%m%d %H:%i:%s') = '20090101 00:00:00'

    推荐的写法:

    SELECT DATE_FORMAT(gmt_create,'%Y%m%d %H:%i:%s') FROM ... WHERE gmt_create = str_to_date('20090101 00:00:00', '%Y%m%d %H:%i:%s')

其他规范

  • WHERE 条件中不要在索引列上进行数学运算或函数运算。
  • 用 in/union 替换 or,并注意 in 的个数小于 300。
  • 避免使用 %前缀进行模糊前缀查询。
  • 如应用使用 Multi Statements 执行 SQL,即将多个 SQL 使用分号连接,一次性地发给客户端执行,TiDB 只会返回第一个 SQL 的执行结果。
  • 当使用表达式时,检查其是否支持计算下推到存储层的功能 (TiKV、TiFlash),否则应有预期在 TiDB 层需要消耗更多内存、甚至 OOM。计算下推到存储层的功能列表如下:
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论