采访中被问到:我有两个表,一个表有id、姓名、地址等记录。id(pk)从1到10000000。另一个表有从10000001到20000000的记录。我必须检查表1或表2中是否存在特定的id,并返回相应的结果。因为表的大小很大,所以必须考虑一种优化的方法来实现这一点。
oymdgrw71#
我脑子里没什么主意。在配置单元中,可以使用map-side连接,当一个表大而另一个表小时,它比通常的连接快得多(此处第二个表是您要搜索的id)您可以优化存储数据的方式。如果此类查询频繁,则按id列对数据进行排序。orc之类的列格式跟踪每个文件中id的范围,从而使此类查询更快。
nzkunb0c2#
declare @ID BIGINT SET @ID=10000000 IF EXIST(SELECT ID FROM TABLE1 WHERE ID=@ID) SELECT ID,NAME,ADDRESS FROM TABLE1 WHERE ID=@ID ELSE IF EXIST(SELECT ID FROM TABLE2 WHERE ID=@ID) SELECT ID,NAME,ADDRESS FROM TABLE2 WHERE ID=@ID ELSE SELECT @ID
2条答案
按热度按时间oymdgrw71#
我脑子里没什么主意。
在配置单元中,可以使用map-side连接,当一个表大而另一个表小时,它比通常的连接快得多(此处第二个表是您要搜索的id)
您可以优化存储数据的方式。如果此类查询频繁,则按id列对数据进行排序。orc之类的列格式跟踪每个文件中id的范围,从而使此类查询更快。
nzkunb0c2#