本文介绍在 OceanBase 数据库其他相关规范。
导数的规范
datax 导出后需拆成多个小文件,再逐个执行数据库导入,每个小文件控制在 1GB 以内
其他
-
禁止
force index、
ignore index、
straight_join、
SQL_no_cache 在生产环境使用。
-
禁止使用
BEGIN...END,
LOOP...END LOOP,
REPEAT...UNTIL...END REPEAT,
WHILE...DO...END WHILE 等的复合语句
说明
复杂逻辑都应该放在应用内处理,避免写复杂SQL。
-
页面搜索严禁左模糊或者全模糊。
说明
SQL 中包含 like 查询,一定要使用最左前缀匹配。
-
分区表必须带分区键,禁止不带分区键扫描所有分表。
-
不推荐 JOIN 三个以上的表。
-
在多表连接的查询中,驱动表须要选择结果集较小的表。
-
禁止写成多层子查询嵌套的 SQL 语句,推荐改写成表顺序连接的格式。
-
禁止在
INSERT、
UPDATE、
DELETE、
REPLACE 语句中进行多表连接操作。
-
利用覆盖索引来进行查询操作,来避免回表操作。
-
减少使用自定义函数、自定义类型、存储过程。
说明
存储过程不利于定位问题,移植性差,另外从性能角度而言,存储过程 SQL 一般均是有着多表, 或多判断等语句,这些语句本身性能消耗严重,执行耗时长,会导致系统并发性能下降,如果存储过程中有算数运算,也会导致严重的性能问题。
-
减少使用非逻辑条件查询
!= <> not
-
减少聚合函数的使用
-
建议避免
in 操作,带
in 的子查询尽量改写成
join,如必须要使用,
in list 中的常量个数应小于 100 。
-
建议语句中使用
WHERE 或
LIMIT,否则会扫全表。
-
控制中间结果集大小。
说明
有
distinct、
order by 和
group by 子句的查询,中间结果集限制 1 万行以内,对于超过 1 万行的大结果集的排序、分组,需要放到程序端实现。
-
hash 分区的个数建议是2的幂次数,否则会造成分区间数据不均匀。
-
不建议使用全文检索功能。
-
不建议使用事件
EVENT 功能。
-
程序中禁止使用或操作 OceanBase 库和 test 库,禁止创建 test 或以 test 开头的库。
-
禁止在 OceanBase 中使用用户自定义变量。
-
数据库中不要进行业务的实时统计或者汇总等计算操作,可导出后利用其它工具或者在线下备份库中完成。
-
避免使用
HAVING。
HAVING 子句在
GROUP BY 处理后筛选,而
WHERE 子句在处理期间筛选数据,所以
WHERE 子句可以消除很多排序和
I/O 时间。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932852/
,如需转载,请注明出处,否则将追究法律责任。