一对一代理,即一个Mycat后端连接一个MySQL
    Mycat.逻辑库.逻辑表 ———————-映射—————————> MySQL.物理库.物理表
    8066.db1.t1———————-映射—————————> 3306.db1.t1
    8066.db1.t2———————-映射—————————> 3306.db1.t2
    此时只需要把查询t1或者t2或者t1或者t2的sql只需要转发到3306上面

    一对二代理,即一个Mycat后端连接两个MySQL
    Mycat.逻辑库.逻辑表 ———————-映射—————————> MySQL.物理库.物理表
    8066.db1.t1———————-映射—————————> 3306.db1.t1
    8066.db1.t2———————-映射—————————> 3307.db1.t2
    此时只需要把查询t1结果集的sql转发到3306,而查询t2结果集的sql转发到3307

    问题1:
    在一对二代理情况下,对于select * from t1 join t2 on t1.id = t2.id,怎么查询?

    答案:把这个sql拆除两个sql,一条查询3306,一条查询3307

    HashJoin(
    3306:select from t1,
    3307:select
    from t2
    )

    问题2:
    在一对二代理情况下,怎么得知select * from t1 join t2 on t1.id = t2.id的列信息,假设t1和t2只有id这一列

    答案1:Mycat获取3306的t1和3307的t2表信息,然后生成执行计划,得出列信息
    答案2:把select * from t1 join t2 on t1.id = t2.id发送到某个mysql上面,这个mysql上面有t1和t2两个表,查询这个sql的列名,但不执行这个sql

    8066.db1.t1———————-辅助查询—————————> 某个mysql.db1.t1 ,db1.t2

    问题3:
    在一对二代理情况下,怎么得出show tables,show columns的结果?
    答案1:Mycat获取3306的t1和3307的t2表信息,合拼两个表的信息
    答案2:把show tables,show columns发送到某个mysql上面这个mysql,上面有t1和t2两个表,就可以得到正确的结果
    8066.db1.t1———————-辅助查询—————————> 某个mysql.db1.t1 ,db1.t2

    更复杂的例子……………………..

    单表映射,一对二代理,即一个Mycat后端连接两个MySQL
    Mycat.逻辑库.逻辑表 ———————-映射—————————> MySQL.物理库.物理表
    8066.db1.t1———————-映射—————————> 3306.db1.t_1
    8066.db1.t2———————-映射—————————> 3307.db1.t_2
    此时只需要把查询t1结果集的sql转发到3306,而查询t2结果集的sql转发到3307,并且把表名改写

    问题1:
    在一对二代理情况下,对于select * from t1 join t2 on t1.id = t2.id,怎么查询?
    答案:把这个sql拆除两个sql,一条查询3306,一条查询3307

    HashJoin(
    3306:select from t_1,
    3307:select
    from t_2
    )

    问题2:
    在一对二代理情况下,怎么得知select * from t1 join t2 on t1.id = t2.id的列信息,假设t1和t2只有id这一列

    答案1:Mycat获取3306的t1和3307的t2表信息,然后生成执行计划,得出列信息
    答案2:把select * from t1 join t2 on t1.id = t2.id发送到某个mysql上面,这个mysql上面有t1和t2两个表,查询这个sql的列名,但不执行这个sql
    8066.db1.t1———————-辅助查询—————————> 某个mysql.db1.t1
    8066.db1.t1———————-映射—————————> 3306.db1.t_1
    8066.db1.t2———————-映射—————————> 3307.db1.t_2

    问题3:
    在一对二代理情况下,怎么得出show tables,show columns的结果?
    答案1:Mycat获取3306的t1和3307的t2表信息,合拼两个表的信息
    答案2:把show tables,show columns发送到某个mysql上面这个mysql,上面有t1和t2两个表,就可以得到正确的结果
    8066.db1.t1———————-辅助查询—————————> 某个mysql.db1.t1,db1.t2
    8066.db1.t1———————-映射—————————> 3306.db1.t_1
    8066.db1.t2———————-映射—————————> 3307.db1.t_2

    问题4:
    怎么执行create table t1?
    答案1:Mycat在默认存储数据的mysql上面执行create table t1,然后更新mycat配置
    答案2:Mycat在默认存储数据的mysql上面执行create table t1,在某个mysql上面执行create table t1,然后更新

    8066.db1.t1———————-辅助建立—————————> 某个mysql.db1.t1
    8066.db1.t1———————-存储映射—————————> 默认的mysql.db1.t1

    问题5:
    怎么执行create table db1.t1,t1映射到3307.db1.t_1表上?
    答案1:Mycat在3307.db1.t_1的mysql上面执行create table t_1,然后更新mycat配置,逻辑表名是db1.t1
    答案2:Mycat在某个mysql上面执行create table t1,在3307.db1.t_1的mysql上面执行create table t_1,然后更新mycat配置,逻辑表名是db1.t1

    8066.db1.t1———————-辅助建立—————————> 某个mysql.db1.t1
    8066.db1.t1———————-存储映射—————————> 3307.db1.t_1

    问题6:
    怎么执行drop table db1.t1,t1映射到3307.db1.t_1表上?
    答案1:Mycat在3307.db1.t_1mysql上面执行drop table t_1,然后更新mycat配置,删除逻辑表db1.t1
    答案2:Mycat在某个mysql上面执行drop table t1,在3307.db1.t_1的mysql上面执行drop table t_1,删除逻辑表db1.t1

    8066.db1.t1———————-辅助删除—————————> 某个mysql.db1.t1
    8066.db1.t1———————-删除存储—————————> 3307.db1.t_1

    上文中的某个mysql或者默认存储数据的mysql就是原型库,Mycat执行SQL未必使用原型库,但是有些情况,Mycat分析不了SQL就需要使用原型库

    获取3306的t1和3307的t2表信息 此处一般是根据mycat配置文件生成的信息,为什么不直接使用mysql的信息,因为逻辑表的字段与mysql的表的字段未必相同,比如mysql的表带有分片表的系统字段,比如校验码字段,,而逻辑表并不没有这字段.这也就是为什么配置里面会配置建表sql

    drop 和 create table行为看具体版本的实现,最理想的情况是只删除存储,不影响其他表,但是实际上很多情况还需要原型库辅助完成sql的分析,建议自己实现alter,drop 表,不要通过mycat