このセクションでは、関数ベースのインデックスに使用できる、または条件を満たしているシステム関数を主にリストアップします。
パラメータタイプに制限のないシステム関数
以下の表に示す関数の式は、関数ベースのインデックスとして使用できます。
| TRIM | ORD | IS_ipv6 | POINT |
| SUBSTR | LTRIM | IS_ipv4Mapped | LINESTRING |
| SUBSTRING_INDEX | RTRIM | IS_ipv4-Compatible | MULTIPOINT |
| MD5 | LPAD | CRC32 | MULTILINESTRING |
| IP2INT | BIT_COUNT | TO_BASE64 | POLYGON |
| INT2IP | FIND_IN_SET | FROM_BASE64 | MULTIPOLYGON |
| INSERT | LEFT | SHA | GEOMCOLLECTION |
| UNHEX | MAKE_SET | SHA2 | ST_ASTEXT |
| TIMEDIFF | SECOND | UNCOMPRESS | ST_BUFFER_STRATEGY |
| PERIOD_DIFF | MINUTE | UNCOMPRESSED_LENGTH | ST_BUFFER |
| STR_TO_DATE | MICROSECOND | UUID_TO_BIN | ST_ASWKT |
| FROM_DAYS | TO_SECONDS | IS_UUID | ST_DISTANCE |
| FLOOR | TIME_TO_SEC | UUID_TO_BIN | ST_ISVALID |
| CEIL | SEC_TO_TIME | FORMAT_BYTES | ST_ASWKB |
| REPEAT | INTERVAL | FORMAT_PICO_TIME | ST_ASBINARY |
| REPLACE | SQRT | DECODE | ST_DISTANCE_SPHERE |
| LOCATE | LOG2 | ENCODE | ST_WITHIN |
| REVERSE | LOG10 | LN | ST_CONTAINS |
| RIGHT | TRUNCATE | LOG | ST_AREA |
| RPAD | EXP | ASIN | ST_INTERSECTS |
| CHAR_LENGTH | HOUR | ACOS | ST_X |
| IFNULL | MID | ATAN | ST_Y |
| CONCAT_WS | RADIANS | ATAN2 | ST_LATITUDE |
| FIELD | MAKETIME | COS | POWER |
| NULLIF | FORMAT | TAN | LENGTHC |
| CHAR_LENGTH | COT | SIN | COMPRESS |
| POSITION | BIT_LENGTH | MAKEDATE | INSTRC |
| ELT | PI | PERIOD_ADD | CHAR |
| STRCMP | DEGREES | TIME_FORMAT | SOUNDEX |
| CEILING | EXPORT_SET | ST_LONGITUDE | LENGTH |
| TIME | IS_ipv4 | ST_TRANSFORM | CONVERT |
| COALESCE | ASCII | CONVERT_TZ | HEX |
| NVL | INSTR | SPACE | INET6_NTOA |
| INET6_ATON | INET_ATON | GREATEST | LEAST |
| UPPER | LOWER | SUBTIME | ADDTIME |
| DATE_FORMAT | ROUND | GET_FORMAT | - |
パラメータタイプに制限があるシステム関数
以下のシステム関数は、パラメータがTIME型の場合、関数ベースのインデックスとして使用することを禁止されています。例えば、DATE 関数では、最初のパラメータがTIMEの場合、関数ベースのインデックスとして使用することを禁止します。また、DATEDIFF 関数では、いずれかのパラメータがTIME型の場合、関数ベースのインデックスとして使用することを禁止します。
| DATE | TIMESTAMP | MONTHNAME | ADDDATE |
| DATE_SUB | DAY | MONTH | TIMESTAMP_NVL |
| DAYNAME | YEAR | TIMESTAMPDIFF | QUARTER |
| DAYOFMONTH | WEEKOFYEAR | TO_DAYS | DAYOFWEEK |
| WEEKDAY | DATEDIFF | DAYOFYEAR | YEARWEEK |
| TIMESTAMPADD | LAST_DAY | WEEK | - |
JSON関連のシステム関数
以下のJSON関数の式は、関数ベースのインデックスとして使用できます。
| JSON_EXTRACT | JSON_TYPE | JSON_CONTAINS | JSON_LENGTH |
| JSON_CONTAINS_PATH | JSON_INSERT | JSON_DEPTH | JSON_STORAGE_SIZE |
| JSON_KEYS | JSON_STORAGE_FREE | JSON_ARRAY | JSON_MERGE_PRESERVE |
| JSON_QUOTE | JSON_MERGE | JSON_UNQUOTE | JSON_MERGE_PATCH |
| JSON_OVERLAPS | JSON_PRETTY | JSON_REMOVE | JSON_SET |
| JSON_SEARCH | 1 MEMBER OF | JSON_VALID | JSON_VALUE |
| JSON_ARRAY_APPEND | JSON_OBJECT | JSON_ARRAY_INSERT | JSON_QUERY |
| JSON_REPLACE | - | - | - |
さらに、以下の関数は現在、述語内でのみ使用可能です。
| JSON_EQUAL | JSON_EXISTS |
CAST式
CAST式は特殊であり、そのターゲットタイプまたはソースタイプが時間型の場合、関数ベースのインデックスとして使用することを禁止されています。具体的なシナリオは以下の表に示されています。
| ソースタイプ | ターゲットタイプ | 説明 |
|---|---|---|
| TIME | DATETIME / TIMESTAMP / DATE | 関数ベースのインデックスとしての使用を禁止 |
| datetime/TIMESTAMP/DATE | TIMESTAMP WITH TIME ZONE / TIMESTAMP WITH LOCAL TIME ZONE | 関数ベースのインデックスとしての使用を禁止 |