我需要从一百多张表中检索一条数据,每张表列名都是id,c1,c2。每张表有数据500万行,第一张表id范围是1-500万,第二张表是500万零1到一千万,依次类推。我该怎么样用sql来查询其中的一条数据呢?(比如说我给出c1或者id,现在要查询c2。c1是不知道在哪张表中的,所以要在所有的表中查询结果,我希望有一个简便的方法来查询)
我现在想要通过c1来查询c2的话用的是下面的方法。可是总共有一百多行,虽然我可以直接用程序生成这个命令然后进行查询,但是,我想问问有没有什么更简便的方法。
SELECT * FROM table1 WHERE c1='test' UNION SELECT * FROM table2 WHERE c1='test' UNION SELECT * FROM table3 WHERE c1='test' UNION SELECT * FROM table4 WHERE c1='test' UNION SELECT * FROM table5 WHERE c1='test' ;
没有办法,都不知道在哪个表,只能都查。或者你可以把经常查的数据在哪个表的信息记录下来。
你们的表类似于分区表,分的时候肯定要根据一些规则吧,看样子你们是根据id来划分的。也可以根据某些常用的条件重新分下区。
好吧,只能这样了。感谢你的回答。
select c2 from table 1 where id = ''
union all
select c2 from table 2 where id = ''
union all
select c2 from table 3 where id = ''
直接union all查询,或者能够确定数据范围,就能指定对应表了
感谢你的回答。如果需要通过id查询的话,可以先通过id范围来查询表。比如说id是10,我可以先查询id=10的数据在那张表中,然后再查询那一张表就可以了。但是如果要指定c1来查询的话,c1没什么规律,我是用的补充里的方法查询的。
@KHDXS7: 通过c1加索引 union all查询也很快的
@我恰芙蓉王: 感谢你的建议,我对c1建立了索引。查询使用的UNION ALL,不用进行再次筛选会比UNION快点。整体上速度快了一大截。非常感谢你的建议。