返回首页

gbase数据、南大通用产品文档:GBase8a查询条件不要使用函数

更新日期:2024年09月11日

建议where 条件中的列尽量不使用函数运算,因为加函数运算会造成智能索引失
效,sql 性能降低。

例如:
原始sql 为:
where substr(product_no, 2, 1) in ('3', '4', '5', '8')
智能索引失效,性能非常低。
改写为:
where (product_no like '13%' or product_no like '14%' or product_no like '15%' or
product_no like '18%')'
智能索引将对字符串类型数据前8 个字符的索引。

SQLParamOptions 允许应用程序为由 SQLBindParameter 分配的一组参数指定多个值。
为一组参数指定多个值的函数对用于批量插入和其它需要数据源多次使用各种参数值处理
相同 SQL 语句的工作很有用。例如,应用程序可以为与 INSERT 语句关联的参数集指定
三个值,然后再次执行 INSERT 语句来执行三次插入操作。
下表列出了 SQLParamOptions 返回的 SQLSTATE 值,并解释了该函数内容中的每个值;
在驱动程序管理器返回的每个 SQLSTATE 的描述之前都包含注释 (DM)。除非另有说明,
否则与每个 SQLSTATE 值关联的返回码都是 SQL_ERROR。
SQLSTATE
错误值
错误消息
01000

General warning
S1000

General error
S1001

Memory-allocation failure
S1010

Function-sequence error
S1107

Row value out of range

概述
比较运算的结果是1(TRUE)、0(FALSE)或NULL。
这些运算可用于数字和字符串上。根据需要,字符串将会自动地被转换为数字,
而数字也可自动转换为字符串。
说明
本章中的一些函数(如GREATEST() 和LEAST())的所得值虽然不包括1 (TRUE)、0
(FALSE)或NULL,但对参数值进行比较时,也会基于下述规则。

GBase 8a MPP Cluster 使用下列规则进行比较:

如果一个或两个参数是NULL,比较的结果是NULL,除了<=>比较符
(含有NULL 参数时,<=>的比较结果不是NULL)。

如果在一个比较操作中两个参数均是字符串,
它们作为字符串被比较
(默
认不区分大小写)。

如果两个参数均是数值,它们按照数值被比较。

如果比较操作中,一个参数为字符串,另一个为数值,则将字符串转换
为数值后,按照数值进行比较。字符串转换为数值,对于数字开头的字
符串,转换为数值的结果是截取前面的数值部分;对于非数字开头的字
符串,转换成数值的结果为0。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
647

十六进制值如果不与一个数字进行比较,那么它将被当作一个二进制字
符串。

如果参数之一是DATETIME 列类型,
而其他参数是一个常量,
在比较执
行之前,这个常量被转换为一个时间戳。

在其它情况下,参数作为浮点(REAL)数字被比较。
注意
IN()中的参数不是这样的。为了安全起见,建议用户在比较时使用完整的
DATETIME/DATE/TIME 字符串。
为了进行比较,用户可以使用CAST()函数将某个值转为另外一个类型。