静态SQL 和动态SQL 的区别
静态SQL(或嵌入式SQL) 是应用程序中的 SQL 语句,它们在运行时不会更改,因此可以硬编码到应用程序中。
动态 SQL是在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。
静在静态 SQL中
- 如何访问数据库是在嵌入式 SQL 语句中预先确定的
- 它更加迅速和高效SQL 语句是在编译时编译的
- SQL 语句在运行时编译。应用程序计划的解析、验证、优化和生成在编译时完成,一般用于数据分布均匀的情况
- 不使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
- 它不太灵活。
在动态 SQL 中
- 如何访问数据库是在运行时确定的,它不那么迅速和高效
- 应用程序计划的解析、验证、优化和生成在运行时完成
- 它通常用于数据分布不均匀的情况。
- 使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
- 它更灵活。
先说涉及到的场景
如果客户填了查询信息,则查询该条件;如果客户没填,则返回所有数据。
动态SQL,将查询条件中的判断语句,提前在代码中判断完成,从而放到数据库中(如SQL Server),而且是简单的,可利用索引的SQL语句。
真实案例:(Dapper)
public override string GetSelectSql()
{
return $"select s.StaffId,s.StaffName {GetPageSelectTotalSql()}";
}
public override string GetPageSelectTotalSql()
{
return "from LrStaffAreaConfig s where 1=1";
}
protected override void ResolveCondition()
{
if (!string.IsNullOrWhiteSpace(StaffName))
{
AddWhere(@"and s.StaffName = @StaffName", "StaffName", StaffName);
}
if (!string.IsNullOrWhiteSpace(StaffId))
{
AddWhere("and s.StaffId = @StaffId", "StaffId", StaffId);
}
}
(请忽略一些封装的方法,代码只作为展示)
相比于静态SQL提高了性能避免导致一些情况下无法使用索引。
我是以一名实习生的视野来写文章的(因为我本人确实也是哈哈)所以有什么不对的地方还请指正。
参考的文章https://www.cnblogs.com/sdflysha/p/20191221-why-dynamic-sql.html
标签:语句,场景,StaffName,静态,应用程序,StaffId,SQL From: https://www.cnblogs.com/EsonLiu/p/17168055.html