Distinct下推是指
select distinct .....或者select ... group by ....语法下推而非count distinct函数,当然count distinct在一些情况也会被优化为select distinct
SELECT DISTINCT * from db1.distinct_sharding//distinct_sharding是分片表生成sqSELECT `distinct_sharding`.`id`, `distinct_sharding`.`user_id`, `distinct_sharding`.`traveldate`, `distinct_sharding`.`fee`, `distinct_sharding`.`days`, `distinct_sharding`.`blob`FROM db1_1.sharding_0 AS `distinct_sharding`GROUP BY `distinct_sharding`.`id`, `distinct_sharding`.`user_id`, `distinct_sharding`.`traveldate`, `distinct_sharding`.`fee`, `distinct_sharding`.`days`, `distinct_sharding`.`blob`
SELECT DISTINCT id from db1.distinct_sharding//id是分片键,不是主键生成sqlSELECT `distinct_sharding`.`id`FROM db1_0.sharding_0 AS `distinct_sharding` GROUP BY `distinct_sharding`.`id`
SELECT DISTINCT traveldate from db1.distinct_sharding//traveldate不是分片键生成sqlSELECT `distinct_sharding`.`traveldate`FROM db1_1.sharding_0 AS `distinct_sharding`GROUP BY `distinct_sharding`.`traveldate`MycatHashAggregate(group=[{0}]) MycatView(distribution=[[db1.distinct_sharding]])
SELECT DISTINCT user_id from db1.distinct_sharding//user_id带有唯一索引,但不是分片键也不是主键生成sqlSELECT `distinct_sharding`.`user_id` FROM db1_1.sharding_0 AS `distinct_sharding`//MycatView(distribution=[[db1.distinct_sharding]])
SELECT user_id,id from db1.distinct_sharding group by user_id,id//user带唯一索引,id是分片键生成sqlSELECT `distinct_sharding`.`user_id`, `distinct_sharding`.`id`FROM db1_1.sharding_0 AS `distinct_sharding`GROUP BY `distinct_sharding`.`user_id`, `distinct_sharding`.`id`//MycatView(distribution=[[db1.distinct_sharding]])
SELECT count(*) from db1.distinct_sharding group by user_id //user带唯一索引生成sqlSELECT `distinct_sharding`.`user_id`, COUNT(*) AS `count(*)`FROM db1_1.sharding_0 AS `distinct_sharding`GROUP BY `distinct_sharding`.`user_id`MycatProject(count(*)=[$1])MycatHashAggregate(group=[{0}], count(*)=[$SUM0($1)])MycatView(distribution=[[db1.distinct_sharding]])
mycat2会对配置中的建表语句进行分析然后对执行计划优化,对于主键和带有唯一索引的字段会视为唯一的键.注意分片键可能并不是唯一的键.
