“动态 SQL 能提升性能”这个说法并不总是成立,但在特定场景下,合理使用动态 SQL 确实可以带来性能提升。下面从原理和常见场景角度说明。
动态 SQL 是指在运行时根据条件拼接、生成并执行 SQL 语句,例如:
<if>、<where>EXECUTE IMMEDIATE静态 SQL 往往写成“全量条件”:
SELECT * FROM user
WHERE (#{name} IS NULL OR name = #{name})
AND (#{age} IS NULL OR age = #{age})
问题:
动态 SQL:
SELECT * FROM user
<where>
<if test="name != null">AND name = #{name}</if>
<if test="age != null">AND age = #{age}</if>
</where>
✅ 好处:
数据库优化器对“确定性的 SQL”更友好:
OR / 函数包裹字段动态 SQL 可针对不同场景生成不同 SQL,例如:
静态 SQL 常为了“通用”而多 JOIN:
SELECT *
FROM order o
LEFT JOIN user u ON o.uid = u.id
动态 SQL 可:
✅ 减少:
动态 SQL 可根据条件:
(谨慎使用,依赖 DBA 评估)
动态 SQL 可拼批量:
INSERT INTO t (id, name) VALUES
(1,'a'),(2,'b'),(3,'c')
✅ 比多次单条插入快很多
动态 SQL 提升性能的本质是:让 SQL 更“贴合实际查询场景”,从而减少不必要计算、扫描和解析。
如果你愿意,可以告诉我:
我可以给你更针对性的建议或示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。