本帖最后由 yz394777014 于 2010-05-25 14:14:44 编辑

解决方案 »

  1.   


    这全表扫描不一定就不好哈,优化要看你索引情况。
    this_.TM_MM_JIS_SHEET_ID IN
                     ()
    这里可以尝试用exists
    这么多外连接,看看是不可以合并或者增加外键和外键索引。
      

  2.   

    看了一下in列表中的两个表在外层中都已关联,直接把in取消,将相应条件写到外层来
      

  3.   

    1楼的朋友,您好,这个exists好像没有太大影响。主要是in(这里已经过滤很多数据了,小量数据了!)
    性能影响主要还是在表连接查询!
    分析如下:你看是否有其他的优化方式呢?
      

  4.   

    SELECT 
      ...........
      FROM TM_MM_JIS_SHEET this_
      LEFT OUTER JOIN TM_BAS_STORAGE tmbasstora2_
        ON this_.DOCK_ID = tmbasstora2_.TM_BAS_STORAGE_ID
      LEFT OUTER JOIN TM_BAS_RACK_TYPE tmbasrackt3_
        ON this_.TM_BAS_RACK_TYPE_ID = tmbasrackt3_.TM_BAS_RACK_TYPE_ID
      LEFT OUTER JOIN TM_BAS_SUPPL tmbassuppl4_
        ON this_.TM_BAS_SUPPL_ID = tmbassuppl4_.TM_BAS_SUPPL_ID
     WHERE this_.SHEET_STATUS <> :1 AND
           tmbassuppl4_.TM_BAS_SUPPL_ID IN (:2) AND
           this_.CREATE_TIME >= :3 AND
           this_.CREATE_TIME <= :4
      

  5.   


      WHERE   this_.TM_MM_JIS_SHEET_ID IN
                     (SELECT   DISTINCT this_.TM_MM_JIS_SHEET_ID AS y0_
                        FROM      TM_MM_JIS_SHEET this_
                               INNER JOIN
                                  TM_BAS_SUPPL supplier1_
                               ON this_.TM_BAS_SUPPL_ID =
                                     supplier1_.TM_BAS_SUPPL_ID
    其实这块应该是多余的了,朋友,你也早就知道了,我的上面这个语句是通过Hibernate的API生成的SQL语句,所以有一些出入!我们现在分析的是用JDBC的方式。
    Hibernate就是这点不好,生产的SQL语句有些复杂,耗性能!
      

  6.   


    这个部分性能很差.
    建议直接用INNER JOIN TM_BAS_SUPPL