# [FAQ] TiDB 分区表 min() max() 函数无法裁剪无用分区

## Key Words

min(), max(), partititon table, table full scan

## Description

期待将在 `top_n` 方法下推至 tikv，因为 x 已经是分区键，如果是 Max 函数其实不用访问所有分区；

TiDB 复现步骤如下：

```sql
create table t (x int) partition by range (x) (
partition p0 values less than (5),
partition p1 values less than (10),
partition p2 values less than (15)
);
explain select max(x) from t;

+--------------------------------+----------+-----------+---------------+----------------------------------+
| id                             | estRows  | task      | access object | operator info                    |
+--------------------------------+----------+-----------+---------------+----------------------------------+
| StreamAgg_10                   | 1.00     | root      |               | funcs:max(test.t.x)->Column#3    |
| └─TopN_11                      | 1.00     | root      |               | test.t.x:desc, offset:0, count:1 |
|   └─TableReader_19             | 1.00     | root      | partition:all | data:TopN_18                     |
|     └─TopN_18                  | 1.00     | cop[tikv] |               | test.t.x:desc, offset:0, count:1 |
|       └─Selection_17           | 9990.00  | cop[tikv] |               | not(isnull(test.t.x))            |
|         └─TableFullScan_16     | 10000.00 | cop[tikv] | table:t       | keep order:false, stats:pseudo   |
+--------------------------------+----------+-----------+---------------+----------------------------------+
```

## Content

MySQL 执行情况如下：

```sql
mysql> create table t (x int) partition by range (x) (
    -> partition p0 values less than (5),
    -> partition p1 values less than (10),
    -> partition p2 values less than (15)
    -> );
Query OK, 0 rows affected (0.04 sec)

mysql> explain select max(x) from t;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | t     | p0,p1,p2   | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.01 sec)
```

因为 MySQL 也不会直接剪裁掉无用分区的访问步骤，直接剪裁会产生问题，即：如果最新的分区中没有数据，那么只访问最新分区便会产生错误的结果返回。

## Affected Versions

ALL