# [FAQ] TiDB insert 语句使用 ifnull 函数导致 compile time 高

## Key Words

insert, Compile, ifnull

## Description

从 TiDB Dashboard 查看 Insert Slow Query 执行计划，Compile Time 过大，即：`Compile Time` 在 30ms 以内完成视为合理预期，该 SQL 的 `Compile Time` 远超该值。

## Content

1. 从慢日志查询该 SQL 信息发现文本过长，TiDB 推荐 SQL 长度为 4096，但该 SQL 已经造成慢日志因超过阈值省略 SQL 文本的情况，即：下文的 (len:395939)。

    ```sql
    # Time: 2022-10-13T12:01:17.046963268+08:00
    # Txn_start_ts: 436635874349023376
    # User@Host: XXX
    # Conn_ID: 1161
    # Query_time: 1.427952559
    # Parse_time: 0.281334672
    # Compile_time: 1.027206812
    # Rewrite_time: 0.936116145
    # Optimize_time: 0.000024164
    # Wait_TS: 0.000019576 
    insert into t values ...\n\t            ifnull('5555553078060594',''),\n\t            ifnull('XXX_Column',''),   \n\t            ifnull('100"(len:395939);
    ```

2. 从 SQL 文本中可知，大量 ifnull 函数被用于 insert 语句中，在编译时 TiDB 需要大量时间进行改写，也是主要耗时部分。

3. 已有对 ifnull 函数的优化方案，目前还未合并到任何版本中，具体参考：<https://github.com/pingcap/tidb/pull/39128>。

4. 综上，当 insert 语句出现 compile time 过高时，可尝试缩小文本长度，且如果业务测有大量使用 ifnull 函数可尝试修改逻辑将该部分交由业务测处理。

## Affected Versions

ALL
