两张表,表1数据不定大概50W到200w波动,表2固定1w左右
其中表1包含(ID1),表2包含(ID2,TYPE),三个字段都已经建立了索引
现在查询语句是:
select *(字段省略) from 表2
join 表1 on 表2.ID2=表1.ID2 and 表2.type in(*,*,*...)
in后面的为随机选择,有时会很多20+以上
这样数据库直接查询20w数据左右大概要6分钟,是不是因为in的关系导致每次都全表搜索了
这样的语句应该怎么优化?或者数据库方面需要具体做什么
小弟跪求各位大神指点啊!!!!
如果可能的话,用union,但是你说的 in 中的数据项是动态的。故只能考虑动态sql,比较麻烦。
可以考虑,将in中的数据项原先插入到一个表中(固定的表或者临时表、相关列要有索引),查询的时候,关联上这个表试试看。
每次查询都创建临时表再插入的话 这样会不会更浪费时间啊
追答oracle的临时表可不是临时创建的,都是永久存在的。
追问是DB2,in后面传进来的是以逗号隔开的一串字符串,再创建临时表存储不太现实,嘛,不过还是谢谢了
追答那就用一个 固定表来存储。
总之试试,看能否提供效率
* 哪里本身就是具体字段,只是我这里的问题简写了~~