记一次查询优化,mybatis查询oracle卡,直接拿sql数据库查询很快

调整前

<select id="getList" resultMap="BaseResultMap" parameterType="java.util.Map">
    select
    <include refid="Base_Column_List" />
    from Table1
    <where>
        <if test="start_date!= null">
            and start_date <![CDATA[ >= ]]> #{start_date, jdbcType=TIMESTAMP}
        </if>
    </where>
</select>

调整后

<select id="getList" resultMap="BaseResultMap" parameterType="java.util.Map">
    select
    <include refid="Base_Column_List" />
    from Table1
    <where>
        <if test="start_date!= null">
            and start_date <![CDATA[ >= ]]>  to_date(#{start_date},'yyyy-mm-dd hh24:mi:ss')
        </if>
    </where>
</select>

说明:

1、Table1表的数据量很大。

2、start_date字段是DATE类型,建有索引。

原因:

调整前,指定了类型(和数据库start_date字段的类型不一致),数据库执行查询时发生了隐式转换,索引失效,所以查询慢。

ps:

因为我的查询条件需要精确到时分秒,所以是如上调整,如果查询条件只需要精确到天,可以如下调整

<select id="getList" resultMap="BaseResultMap" parameterType="java.util.Map">
    select
    <include refid="Base_Column_List" />
    from Table1
    <where>
        <if test="start_date!= null">
            and start_date <![CDATA[ >= ]]> #{start_date, jdbcType=DATE}
        </if>
    </where>
</select>

 

 

 

posted @ 2022-10-17 09:26  天天代码码天天  阅读(146)  评论(0编辑  收藏  举报  来源