---
title: "SELECT 语句编写规范 - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: SELECT 语句编写规范 本文介绍在 OceanBase 中进行数据库 SELECT 语句的编写规范。 SELECT 语句推荐指定具体字段名称，禁止写成 &quot;*&quot;。 增加查询分析器解析成本。 增减字段容易与 resultMap 配置不一致。 推荐去掉 SELECT 无用列：SQL 语句的 SELECT 部分只写必要的…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.4

# SELECT 语句编写规范

更新时间：2025-01-06 14:36:06

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/500.sql-reference/200.sql-specifications-and-practices/200.sql-writing-Specification/100.select-statement-writing-specification.md)  

本文介绍在 OceanBase 中进行数据库 SELECT 语句的编写规范。

- SELECT 语句推荐指定具体字段名称，禁止写成 "*"。

     - 增加查询分析器解析成本。
     - 增减字段容易与 resultMap 配置不一致。
 - 推荐去掉 SELECT 无用列：SQL 语句的 SELECT 部分只写必要的列，因为多余的列会导致数据库产生回表(进入数据页获取请求的特定列)，导致更多的 I/O。
 - 使用到分区表的 SQL 语句，其谓词中都必须带上分区键。
 - 不推荐使用 `count(列名)` 或 `count(常量)` 来替代 `count(*)`，`count(*)` 是 SQL92 定义的标准统计行数的语法，跟数据库无关，跟 NULL 和非 NULL 无关。

  #### 说明

  `count(*)` 会统计值为 NULL 的行，而 `count(列名)` 不会统计此列为 NULL 值的行。
 - SELECT 语句非必要不使用 UNION，推荐使用 UNION ALL，并且 UNION 子句个数限制在 5 个以内。

  #### 说明

  UNION 最后会自动执行一个排序来消除重复，但实际上不同的查询之间通常不存在重复。
 - 不推荐使用 in 操作，带 in 的子查询尽量改写成 join。若实在无法避免，需要仔细评估 in 后边的集合元素数量，建议控制在 100 个之内。
 - 不推荐读锁 `SELECT ... for update (with cs)`。如果事务较大，高并发下容易导致锁等待影响业务。
 - 禁止使用非同类型的列进行等值查询。

  #### 说明

  若字段类型为 varchar，where 条件中字段内容为 int，存在隐式转换问题，无法走索引进而可能拖垮数据库。
 - order by 查询语句中，order by 的字段必须唯一或者组合唯一（非唯一字段排序，OceanBase 数据库与 MySQL 表现不一致）。
 - 不推荐核心业务流程 SQL 包含计算操作、多表关联、表遍历 case when 等复杂查询，建议拆分成单表简单查询。
 - 对于查询条件过滤性差的 SQL，应急处理为 SQL 绑定执行计划，长期使用推荐修改 SQL 逻辑。过多的 HINT 会对后续升级维护带来一定的影响。
 - 有 distinct、order by 和 group by 子句的查询，中间结果集限制 10000 行以内，对于大结果集（中间结果集超过 10000 行）的排序、分组放到程序端实现。
 - 在设置并行数的时候，最佳并行数为该表的分片数。

- 在 `WHERE` 条件中不建议对表字段进行算术运算和函数计算。
 - 避免在 SQL 中对变量进行赋值，尤其是在分布式处理时将结果赋值给变量。
 - SQL 语句中条件字段的数据类型必须保持一致，避免隐式类型转换。
 - SQL 语句中的 `SELECT` 投影字段禁止使用数据库保留字。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
