关于sql大数据查询时in效率很低的问题

两张表,表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后面传进来的是以逗号隔开的一串字符串,再创建临时表存储不太现实,嘛,不过还是谢谢了

追答

那就用一个 固定表来存储。

总之试试,看能否提供效率

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-30
表2 TYPE 字段是否可以用Bitmap 索引
第2个回答  2014-10-30
能够用exists的尽量用这个不要用in
第3个回答  2014-10-30
你把* 换成具体的字段名 试试追问

* 哪里本身就是具体字段,只是我这里的问题简写了~~

相似回答