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
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语句有些复杂,耗性能!
这全表扫描不一定就不好哈,优化要看你索引情况。
this_.TM_MM_JIS_SHEET_ID IN
()
这里可以尝试用exists
这么多外连接,看看是不可以合并或者增加外键和外键索引。
性能影响主要还是在表连接查询!
分析如下:你看是否有其他的优化方式呢?
...........
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
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语句有些复杂,耗性能!
这个部分性能很差.
建议直接用INNER JOIN TM_BAS_SUPPL