下推到 TiKV 的表达式列表

当 TiDB 从 TiKV 中读取数据的时候,TiDB 会尽量下推一些表达式运算到 TiKV 中,从而减少数据传输量以及 TiDB 单一节点的计算压力。本文将介绍 TiDB 已支持下推的表达式,以及如何禁止下推特定表达式。

TiFlash 也支持本页列出的函数和算子下推。

已支持下推的表达式列表

表达式分类具体操作
逻辑运算AND (&&)
OR (||)
NOT (!)
XOR
位运算&
~
|
^
<<
>>
比较运算<
<=
=
!= (<>)
>
>=
<=>
BETWEEN ... AND ...
COALESCE()
IN()
INTERVAL()
IS NOT NULL
IS NOT
IS NULL
IS
ISNULL()
LIKE
NOT BETWEEN ... AND ...
NOT IN()
NOT LIKE
STRCMP()
数值运算+
-
*
/
DIV
% (MOD)
-
ABS()
ACOS()
ASIN()
ATAN()
ATAN2(), ATAN()
CEIL()
CEILING()
CONV()
COS()
COT()
CRC32()
DEGREES()
EXP()
FLOOR()
LN()
LOG()
LOG10()
LOG2()
MOD()
PI()
POW()
POWER()
RADIANS()
RAND()
ROUND()
SIGN()
SIN()
SQRT()
控制流运算CASE
IF()
IFNULL()
JSON 运算JSON_ARRAY_APPEND()
JSON_ARRAY()
JSON_CONTAINS()
JSON_EXTRACT()
JSON_INSERT()
JSON_LENGTH()
JSON_MERGE_PATCH()
JSON_MERGE()
JSON_OBJECT()
JSON_REMOVE()
JSON_REPLACE()
JSON_SET()
JSON_TYPE()
JSON_UNQUOTE()
JSON_VALID()
MEMBER OF()
日期运算DATE()
DATE_FORMAT()
DATEDIFF()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
FROM_DAYS()
HOUR()
MAKEDATE()
MAKETIME()
MICROSECOND()
MINUTE()
MONTH()
MONTHNAME()
PERIOD_ADD()
PERIOD_DIFF()
SEC_TO_TIME()
SECOND()
SYSDATE()
TIME_TO_SEC()
TIMEDIFF()
WEEK()
WEEKOFYEAR()
YEAR()
DATE_ADD()
DATE_SUB()
ADDDATE()
SUBDATE()
字符串函数ASCII()
BIT_LENGTH()
CHAR()
CHAR_LENGTH()
CONCAT()
CONCAT_WS()
ELT()
FIELD()
HEX()
LENGTH()
LIKE
LOWER()
LTRIM()
MID()
NOT LIKE
NOT REGEXP
REGEXP
REGEXP_LIKE()
REGEXP_REPLACE()
REGEXP_SUBSTR()
REPLACE()
REVERSE()
RIGHT(), RLIKE
RTRIM()
SPACE()
STRCMP()
SUBSTR()
SUBSTRING()
UPPER()
聚合函数COUNT()
COUNT(DISTINCT)
SUM()
AVG()
MAX()
MIN()
VARIANCE()
VAR_POP()
STD()
STDDEV()
STDDEV_POP
VAR_SAMP()
STDDEV_SAMP()
JSON_ARRAYAGG(key)
JSON_OBJECTAGG(key, value)
加密和压缩函数MD5()
SHA1(), SHA()
UNCOMPRESSED_LENGTH()
Cast 函数CAST()
CONVERT()
其他函数UUID()
窗口函数

禁止特定表达式下推

已支持下推的表达式列表中的函数和运算符,或特定的数据类型(仅限 ENUM 类型BIT 类型)的计算过程因下推而出现异常时,你可以使用黑名单功能禁止其下推,从而快速恢复 TiDB 业务。具体而言,你可以将函数名、运算符名,或数据列类型加入黑名单 mysql.expr_pushdown_blacklist 中,以禁止特定表达式下推。具体方法,请参阅表达式下推黑名单

文档内容是否有帮助?