MYSQL垂直分表后如何查询 10C

Mysql由于列数较大,想进行垂直分表。但是分表之后的查询应该如何完成?为分表之前只要一条where 条件语句就可以,分表之后如果条件中的字段分别在两个表中如何进行查询

9个回答

把不常用的字段单独放在一张表;
把text,blob等大字段拆分出来放在附表中;
经常组合查询的列放在一张表中;

qq_42447615
qq_42447615 对的
一年多之前 回复
hustxay
hustxay 分表中保留相同的主键字段,先left join 然后再查询。顺问你这样分表的意义在哪里?
一年多之前 回复
cyang421
cyang421 可能两张表中的字段都需要组合查询
一年多之前 回复

可能要进行多次查询,然后将结果合并。 或者修改表结构,或者修改代码

如果在两个表中建议添加一个类型标记,标记在不同的表中,然后你可以在select 中使用子查询,使用IF函数判断标记值,然后对应的去查询对应的表中的记录。
也可以同时关联两张表,然后对应的筛选掉你不需要的null数据

UNION/UNION ALL 整合成一个再用WHERE

先把2张表你需要的字段合并起来,然后就可以直接当成一张表来查了
select * from (select a.字段1, a.字段2, a.字段3, b.字段1, b.字段2 from a, b where a.id = b.id) c where c.xxx = xxx and c.xxx = xxx.

先按照两个表的过滤字段WHERE过滤,降低双表连接复杂度
然后根据子查询结果进行JOIN操作,至于采用左、右、内、外连接看你想取的字段了

用union进行连表查询

分表后都会使用一些中间件去查询,中间件会自动做查询合并,插入分表的操作。

select a.*, b.* from table1 a join b on a.id = b.aid where a.xxx = xxx and b.yyy = yyy

你还可以将a,b连接起来做成一个视图(view)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!