日期:2014-05-17  浏览次数:20580 次

一个带子查询的查询优化问题
我有2个表a和b,a表13万行,b表41万行,现在做了个查询,分两步:
1.从a表选择部分记录存入中间表,结果大约有150行,有distinct。
2.把上面的中间表和b表连接,加上一些对b表的限制条件,统计后输出结果。
注:如果把中间表和b表直接连接,结果大约200多行。
我的问题是:
如果我按照上述的步骤搞个中间表,分两步查询,那么查询时间可以忽略不计。如果我合二为一,那么不论我使用子表,exists,还是in,结果都是17秒。
这个好像差太远了吧,有没有什么提高速度的办法?
优化

------解决方案--------------------
这种事情肯定是搞个中间表速度比较快嘛
------解决方案--------------------
2个表直接关联的查询计划是什么?
中间表150行再和b关联无论怎么join都会很快
------解决方案--------------------
这个要把执行计划贴出来才好分析
------解决方案--------------------
唯一可行的就是在a表b表连接条件的字段加上索引,可以提高效率。提高的还会很多。很接近楼主说的是用中间表的效率。
------解决方案--------------------
什么叫:执行计划又不能控制?
------解决方案--------------------
select * from (select distinct a_1 from a where ...) as c inner hash join b on ... where ...