这段 SQL 代码用于查询用户关系信息,并根据关系类型进行筛选。

SELECT
    c.uid, c.avatar
FROM
    zc_user_relation a
    LEFT JOIN zc_user c
          on
    <if test="type != null and type != ''">
        <choose>
            <when test="type == 1">
                a.uid = c.uid
            </when>
            <when test="type == 2 or type == 3 ">
                a.realation_uid = c.uid
            </when>
        </choose>
    </if>
WHERE
    <if test="type != null and type != ''">
        <choose>
            <when test="type == 1">
                a.realation_uid = #{userId}
            </when>
            <when test="type == 2 or type == 3 ">
                a.uid = #{userId}
            </when>
        </choose>
    </if>
    AND ( a.like_status = 1 OR a.super_like_status = 1 )
    AND
    <if test="type == 2 or type == 1">
        not
    </if>
    EXISTS (
        SELECT
            1
        FROM
            zc_user_relation b
        WHERE
            a.realation_uid = b.uid
          AND b.realation_uid = a.uid
          AND ( b.like_status = 1 OR b.super_like_status = 1 )
    )

可能的优化空间:

  1. 添加索引: 为 uid, realation_uid, like_status, super_like_status 等字段添加索引,可以显著提高查询效率。

  2. 减少子查询: 子查询通常比较耗费资源,可以尝试将该查询改写为连接查询或使用临时表来优化性能。例如,可以使用 LEFT JOIN 连接 zc_user_relation 表和本身,并使用条件 b.uid != a.uid OR (b.like_status = 0 AND b.super_like_status = 0) 来筛选符合条件的结果。

  3. 减少条件判断: 可以将 WHERE 语句中多个条件判断简化为更少的判断条件,例如将 type == 1type == 2 or type == 3 统一为 type != null and type != '',然后在 JOIN 条件和 WHERE 条件中使用 CASE WHEN 语句来根据 type 值进行判断。

  4. 分页查询: 如果查询结果较大,可以考虑使用分页查询来降低查询的资源消耗。

  5. 优化数据表结构: 如果数据表结构不合理,可以尝试进行优化,如拆分表、合并表等操作,以提高查询效率。

建议: 针对具体情况进行优化,可以通过测试不同优化方案的执行效率来选择最佳方案。

MySQL 查询优化:获取用户关系信息 SQL 代码示例及优化建议

原文地址: https://www.cveoy.top/t/topic/mLi2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录