# IN查询优化配置

## 概述
为了解决IN查询参数过多导致的数据库参数限制问题和查询性能问题，苍穹产品提供临时表和IN查询拆分两种优化解决方案。运维和实施人员可以参照该文档进行配置。 

## 基本配置
```properties
# 是否开启IN查询优化：默认false
  orm.opt.in.enable=true;
# IN查询优化方案（temp，split）：默认temp
  orm.opt.in.type=temp# 开启IN优化阀值：默认1000
  orm.opt.in.threshold=1000
# IN查询允许的最大个数：默认50w
  orm.opt.in.maxsize=500000
```

**参数说明：**

orm.opt.in.enable：是否开启IN查询优化功能，默认为true。

orm.opt.in.type：IN查询优化方案配置，默认为临时表方案。

orm.opt.in.threshold：开启IN查询优化的阀值，IN查询参数个数>=优化阀值时，启用IN查询优化。

orm.opt.in.maxsize：IN查询允许的最大个数，IN查询参数个数超过允许的最大个数，则系统抛异常，异常信息形如：

> in query params length over the maximum：510000>500000



**配置管理中心（MC）配置示例：**

![IN配置](.\IN配置.png)

## 高级配置

 默认情况下无需配置高级配置项，只有配置为临时表优化方案并且需要调整临时表池配置时需要配置以下信息。 
### 1. 临时表池参数配置
```properties
# 设置池数量的最大值，默认是200
  db.pktemp.pool.maxTotal = 200
# 设置池空闲临时表数量的最大值,默认20
  db.pktemp.pool.maxIdle = 20
# 设置池空闲临时表数量的最小值,默认4
  db.pktemp.pool.minIdle = 4
```
### 2. 临时表是否创建索引配置
```properties
# 设置在创建临时表时是否创建索引，默认为true
db.pktemp.withindex = true
```
### 3.  临时表池清理的参数配置
```properties
#清理线程轮询的间隔时间(单位:minute)，默认是1分钟
db.pktemp.clearservice.interval_minute = 1
```

