调整前

<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>