一、減少查詢返回數據量
1、在查詢語句中使用 resultMap,只選取需要的列,減少返回的數據量。
<resultMap id="userMap" type="User">
<id property="id" column="user_id" />
<result property="name" column="user_name" />
<result property="age" column="user_age" />
</resultMap>
<select id="getUserById" resultMap="userMap" parameterType="java.lang.Long">
SELECT user_id, user_name, user_age
FROM user
WHERE user_id=#{id}
</select>
2、使用分頁查詢,限制返回數據量。
<select id="getUser" resultType="User">
SELECT user_id, user_name, user_age
FROM user
LIMIT #{pageNum}, #{pageSize}
</select>
二、合理使用緩存
1、開啟二級緩存,使用緩存降低查詢次數。
<cache eviction="LRU" flushInterval="600000" size="512" readOnly="true"> </cache>
2、使用查詢緩存
<select id="getUser" resultType="User" useCache="true">
SELECT user_id, user_name, user_age
FROM user
WHERE user_id=#{id}
</select>
三、使用動態 SQL
1、使用If標籤,根據不同的條件動態生成查詢語句。
<select id="getUser" parameterType="User" resultMap="userMap">
SELECT user_id, user_name, user_age
FROM user
WHERE 1=1
<if test="id != null">
AND user_id = #{id}
</if>
<if test="name != null">
AND user_name = #{name}
</if>
</select>
2、使用choose, when, otherwise標籤,根據不同情況生成對應查詢語句。
<select id="getUser" parameterType="User" resultMap="userMap">
SELECT user_id, user_name, user_age
FROM user
<where>
<choose>
<when test="id != null">
user_id = #{id}
</when>
<when test="name != null">
user_name = #{name}
</when>
<otherwise>
1=1
</otherwise>
</choose>
</where>
</select>
四、性能調優
1、使用索引加速查詢,避免全表掃描。
ALTER TABLE user ADD INDEX user_id_index (user_id);
2、使用延遲加載,減少不必要的查詢。
<resultMap id="userMap" type="User">
<id property="id" column="user_id" />
<result property="name" column="user_name" />
<association property="dept" resultMap="deptMap" lazy="true" />
</resultMap>
<select id="getUser" resultMap="userMap" parameterType="java.lang.Long">
SELECT user_id, user_name, dept_id
FROM user
WHERE user_id=#{id}
</select>
<resultMap id="deptMap" type="Dept">
<id property="id" column="dept_id" />
<result property="name" column="dept_name" />
</resultMap>
<select id="getDeptById" resultMap="deptMap" parameterType="java.lang.Long">
SELECT dept_id, dept_name
FROM dept
WHERE dept_id=#{id}
</select>
原創文章,作者:YUAL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135860.html
微信掃一掃
支付寶掃一掃