Distinct下推是指

    1. select distinct .....
    2. 或者
    3. select ... group by ....语法下推
    4. 而非
    5. count distinct函数,当然count distinct在一些情况也会被优化为select distinct
    1. SELECT DISTINCT * from db1.distinct_sharding//distinct_sharding是分片表
    2. 生成sq
    3. SELECT `distinct_sharding`.`id`, `distinct_sharding`.`user_id`, `distinct_sharding`.`traveldate`, `distinct_sharding`.`fee`, `distinct_sharding`.`days`, `distinct_sharding`.`blob`
    4. FROM db1_1.sharding_0 AS `distinct_sharding`
    5. GROUP BY `distinct_sharding`.`id`, `distinct_sharding`.`user_id`, `distinct_sharding`.`traveldate`, `distinct_sharding`.`fee`, `distinct_sharding`.`days`, `distinct_sharding`.`blob`
    1. SELECT DISTINCT id from db1.distinct_sharding//id是分片键,不是主键
    2. 生成sql
    3. SELECT `distinct_sharding`.`id`
    4. FROM db1_0.sharding_0 AS `distinct_sharding` GROUP BY `distinct_sharding`.`id`
    1. SELECT DISTINCT traveldate from db1.distinct_sharding//traveldate不是分片键
    2. 生成sql
    3. SELECT `distinct_sharding`.`traveldate`
    4. FROM db1_1.sharding_0 AS `distinct_sharding`
    5. GROUP BY `distinct_sharding`.`traveldate`
    6. MycatHashAggregate(group=[{0}]) MycatView(distribution=[[db1.distinct_sharding]])
    1. SELECT DISTINCT user_id from db1.distinct_sharding
    2. //user_id带有唯一索引,但不是分片键也不是主键
    3. 生成sql
    4. SELECT `distinct_sharding`.`user_id` FROM db1_1.sharding_0 AS `distinct_sharding`
    5. //MycatView(distribution=[[db1.distinct_sharding]])
    1. SELECT user_id,id from db1.distinct_sharding group by user_id,id
    2. //user带唯一索引,id是分片键
    3. 生成sql
    4. SELECT `distinct_sharding`.`user_id`, `distinct_sharding`.`id`
    5. FROM db1_1.sharding_0 AS `distinct_sharding`
    6. GROUP BY `distinct_sharding`.`user_id`, `distinct_sharding`.`id`
    7. //MycatView(distribution=[[db1.distinct_sharding]])
    1. SELECT count(*) from db1.distinct_sharding group by user_id //user带唯一索引
    2. 生成sql
    3. SELECT `distinct_sharding`.`user_id`, COUNT(*) AS `count(*)`
    4. FROM db1_1.sharding_0 AS `distinct_sharding`
    5. GROUP BY `distinct_sharding`.`user_id`
    6. MycatProject(count(*)=[$1])
    7. MycatHashAggregate(group=[{0}], count(*)=[$SUM0($1)])
    8. MycatView(distribution=[[db1.distinct_sharding]])

    mycat2会对配置中的建表语句进行分析然后对执行计划优化,对于主键和带有唯一索引的字段会视为唯一的键.注意分片键可能并不是唯一的键.