使用Struts运行数据库查询时性能很慢

时间:2013-08-01 20:00:07

标签: sql performance struts action

我正在使用Struts来构建Web应用程序。应用服务器是Tomcat Server 6,数据库是Oracle 11G。我正在执行一个包含以下数据库查询的操作类:

SELECT  BV_USER__TEMP.CEC_ID AS USER_ID,
        BV_USER_BEHRCHY_TEMP.LEVEL_NUM AS LEVEL_NUM,
        BV_IAM_BUSINESS_ENTITY_HIER.BUSINESS_ENTITY_HIER_NAME AS IAM__HIER_NAME,
        'Total Development' AS TOTAL_ENGINEERING,
        BV_IAM_BUSINESS_ENTITY_HIER.BUSINESS_HIER_NAME AS keyCol,          
        BV_USER_BE_HRCHY_TEMP.BUSINESS_ENTITY_DESCR AS val
FROM    BV_IAM_BUSINESS_ENTITY_HIER IAM
INNER JOIN BV_SUB_BUSINESS_ENTITY BSE
ON        (BV_USER_BE_HRCHY_TEMP.SUB_BUSINESS_ENTITY_DESCR =
           BV_IAM_BUSINESS_ENTITY_HIER.BUSINESS_ENTITY_HIER_NAME)
WHERE   IAM_ROLE_NAME='FIN BI_USER LEVEL ACCESS'
        AND IAM_LEVEL_NUM=2
        AND USER_ID=?
GROUP BY 1,2,3,4,5,6
UNION ALL
SELECT  CEC_ID AS USER_ID,
        BUSINESS_ENTITY_HIER_NAME.IAM_LEVEL_NUM AS LEVEL_NUM,
        BUSINESS_ENTITY_HIER_NAME AS keyCol,
        BV_USER_BE_HRCHY_TEMP.BUSINESS_ENTITY_DESCR AS val
FROM    BV_IAM_BUSINESS_ENTITY_HIER IAM
INNER JOIN BV_SUB_BUSINESS_ENTITY BSE
ON        (BUSINESS_ENTITY_NAME=BUSINESS_ENTITY_HIER_NAME)
WHERE   BV_IAM_BUSINESS_ENTITY_HIER.IAM_ROLE_NAME='FIN BI_USER LEVEL ACCESS'
        AND BV_IAM_BUSINESS_ENTITY_HIER.IAM_LEVEL_NUM=1
        AND USER_id=2
GROUP BY 1,2,3,4,5,6
UNION ALL
SELECT  BV_USER_BE_HRCHY_TEMP.USER_ID,
        BV_IAM_BUSINESS_ENTITY_HIER.IAM_LEVEL_NUM AS LEVEL_NUM,
        BV_IAM_BUSINESS_ENTITY_HIER.BUSINESS_ENTITY_HIER_NAME AS IAM_ENTITY_HIER_NAME,
        'Total Development' AS TOTAL_ENGINEERING,
        BUSINESS_ENTITY_HIER_NAME AS keyCol,
        BV_USER_BE_HRCHY_TEMP.BUSINESS_ENTITY_DESCR AS val
FROM    BV_IAM_BUSINESS_ENTITY_HIER IAM
CROSS JOIN BV_USER_BE_HRCHY_TEMP.SUB_BUSINESS_ENTITY_DESCR BSE
WHERE   BV_IAM_BUSINESS_ENTITY_HIER.IAM_ROLE_NAME='FIN BI_USER LEVEL ACCESS'
        AND BV_IAM_BUSINESS_ENTITY_HIER.IAM_LEVEL_NUM=0
        AND USER_ID=?
GROUP BY 1,2,3,4,5,6;

applicationContext.xml bean中:

<bean id="tablOrclDataSourceRead" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:oci:@********DEV" />
    <property name="username" value="username" />
    <property name="password" value="password" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="5" />
    <property name="maxIdle" value="0" />
    <property name="minIdle" value="0" />
    <property name="maxWait" value="-1" />
</bean>

JSON返回:

{"data":[
    {"keyCol":"Utah","val":"Utah"},
    {"keyCol":"Seattle","val":"Seattle"},
    {"keyCol":Nebraska","val":"Nebraska"},
    {"keyCol":"Enterprise Networking","val":"Enterprise Networking"}
]}

使用上述查询执行操作(并返回JSON)所需的时间约为21秒。

如果我错过了什么,请告诉我。

通过SQL开发人员执行时,相同的查询会在不到一秒的时间内返回结果集。

0 个答案:

没有答案