动态SQL与静态SQL使用场景
静态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
动态SQL与静态SQL使用场景的更多相关文章
- 动态sql与静态sql的区别
首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程. 静态SQL,在 ...
- T-SQL动态查询(3)——静态SQL
接上文:T-SQL动态查询(2)--关键字查询 本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...
- 动态SQL是什么??什么是静态SQL,动态SQL的动态体现在哪里???
首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程.在某种高级语言中 ...
- 《Mybatis 手撸专栏》第9章:细化XML语句构建器,完善静态SQL解析
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你只是在解释过程,而他是在阐述高度! 如果不是长时间的沉淀.积累和储备,我一定也没有 ...
- Quartz动态添加定时任务执行sql(服务启动添加+手动添加)
系统用来每天插入视图数据... 一.数据库表设计 1.接口配置表(t_m_db_interface_config) 2.接口日志表(t_m_db_interface_log) 3.前端配置页面 查询页 ...
- 动态SQL和PL/SQL的EXECUTE选项分析
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...
- 使用Statement对象执行静态sql语句
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java ...
- oracle监听动态注册与静态注册
client端如果想要连接到远程的数据库服务器,首先数据库服务器必须启动监听器 oracle监听器的配置在$ORACLE_HOME/network/admin/listener.ora,打开这个文件, ...
- Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)
如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧, 结合个人经验常见如下问题: . 对SQL语句本身进行优化以便获得更优的 ...
- sql存储过程比sql语句执行慢很多
参数嗅探的问题 原因:(1)可能是发生了参数嗅探,第一次赋给存储过程的输入参数,会为该存储过程生成一个基于输入参数的执行计划,因此如果第一次输入的参数不具有代表性(例如大部分查询输入的参数都是A值,但 ...
随机推荐
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...
- 创建SVN和设置密码以及SVN自动更新
重新创建版本库: svnadmin create /usr/local/svn/month_exam //创建一个svn版本仓库month_exam(month_exam可以随便起名字) cd ...
- Spring @Profile注解使用和源码解析
介绍 在之前的文章中,写了一篇使用Spring @Profile实现开发环境,测试环境,生产环境的切换,之前的文章是使用SpringBoot项目搭建,实现了不同环境数据源的切换,在我们实际开发中,会分 ...
- C# 从0到实战--程序入门:基本程序结构·hello,world
为什么要写博客 某人是一名大学生,到了大二,学院开始教授.Net,从这里我接触到了C#和ASP.Net,这些技术让我感到了想不到的快速开发之震撼.于是突发奇想,写此博客来记录我的学习路程.博客不仅仅是 ...
- 分享Zeal的全套离线文档
鉴于Zeal自身的下载速度... 为了方便大家,现在把我自己下载好的Zeal离线文档全部分享出来 百度网盘链接:https://pan.baidu.com/s/19WeEWij3evnuMWhzbHu ...
- 2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到
2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到 ...
- 2022-08-01:以下go语言代码输出什么?A:panic;B:5;C:6;D:编译错误。 package main import ( “fmt“ ) func main() {
2022-08-01:以下go语言代码输出什么?A:panic:B:5:C:6:D:编译错误. package main import ( "fmt" ) func main() ...
- 2022-06-18:golang与 C++数据结构类型对应关系是怎样的?
2022-06-18:golang与 C++数据结构类型对应关系是怎样的? 答案2022-06-18: uintptr和unsafe.Pointer相当于c++的void*,也就是任意指针. uint ...
- 2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9
2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质.比如8,9,10不是两两互质,因为8和10的最大公约数是2. 福大大 答案2021-05- ...
- vue全家桶进阶之路20:ECMAScript脚本语言规范
ECMAScript(简称 ES)是一种由 Ecma 国际组织定义的脚本语言标准,它定义了 JavaScript 语言的基本规范和特性.JavaScript 是一种基于 ECMAScript 标准的编 ...