13901587387 发表于 2022-3-7 11:06

问个数据库的问题

问个问题,建了个配置表,表名是tmp_config,里面有2个字段,一个就是prodid,一个是is_group, prodid 里面就是 '-spidsdd','-yyyesdd','-umgfss'.....

这个tmp_config的prodid有150条记录


is_group 只有3个值 0,1,2

但是我发现建中间表如果这样写的话

create table tmp_01
as
select */parallel(8)/* distinct a.* from tb_name(

这个表很大

) a,(select prodid from tmp_config where is_group = 1) b where a.prodid = b.prodid;

运行起来,一直不出结果,但是如果我把它写死进去,哪怕写死进去100个,也是分分钟就出来了,就像select */parallel(8)/* distinct a.* from tb_name a where prodid in (select prodid from tmp_config where prodid in ('-spidsdd','-yyyesdd','-umgfss'.......)),但这样肯定不科学,有啥好办法吗?

l377076312 发表于 2022-3-7 11:08

你问我???

沉默牛 发表于 2022-3-7 11:10

应该用join呀。。如果数据量大的话,在你的连接字段(prodid )上建索引。。
百十条记录的话,就不用索引了。用join就行

13901587387 发表于 2022-3-7 11:12



沉默牛 发表于 2022-3-7 11:10


应该用join呀。。如果数据量大的话,在你的连接字段(prodid )上建索引。。
百十条记录的话,就不用索引 ...
这个就是join啊,交叉连接就可以了

13901587387 发表于 2022-3-7 11:10



13901587387 发表于 2022-3-7 11:12


这个就是join啊,交叉连接就可以了
索引我也建了

aabbbccc 发表于 2022-3-7 11:12

把那段查询做成临时表再去写创建。数据量大的时候不推荐查询和创表一起做,而且还再嵌套查询,全部做成临时表来搞。

13901587387 发表于 2022-3-7 11:12



aabbbccc 发表于 2022-3-7 11:20


把那段查询做成临时表再去写创建。数据量大的时候不推荐查询和创表一起做,而且还再嵌套查询,全部做成临时 ...
那个不现实,那里面估计快有上亿的数据了
页: [1]
查看完整版本: 问个数据库的问题