静态SQL 和动态SQL 的区别

静态SQL(或嵌入式SQL) 是应用程序中的 SQL 语句,它们在运行时不会更改,因此可以硬编码到应用程序中。

动态 SQL是在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。

静在静态 SQL中

  1. 如何访问数据库是在嵌入式 SQL 语句中预先确定的
  2. 它更加迅速和高效SQL 语句是在编译时编译的
  3. SQL 语句在运行时编译。应用程序计划的解析、验证、优化和生成在编译时完成,一般用于数据分布均匀的情况
  4. 不使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
  5. 它不太灵活。

在动态 SQL 中

  1. 如何访问数据库是在运行时确定的,它不那么迅速和高效
  2. 应用程序计划的解析、验证、优化和生成在运行时完成
  3. 它通常用于数据分布不均匀的情况。
  4. 使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
  5. 它更灵活。

先说涉及到的场景

如果客户填了查询信息,则查询该条件;如果客户没填,则返回所有数据。

动态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使用场景的更多相关文章

  1. 动态sql与静态sql的区别

    首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程. 静态SQL,在 ...

  2. T-SQL动态查询(3)——静态SQL

    接上文:T-SQL动态查询(2)--关键字查询   本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...

  3. 动态SQL是什么??什么是静态SQL,动态SQL的动态体现在哪里???

    首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程.在某种高级语言中 ...

  4. 《Mybatis 手撸专栏》第9章:细化XML语句构建器,完善静态SQL解析

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你只是在解释过程,而他是在阐述高度! 如果不是长时间的沉淀.积累和储备,我一定也没有 ...

  5. Quartz动态添加定时任务执行sql(服务启动添加+手动添加)

    系统用来每天插入视图数据... 一.数据库表设计 1.接口配置表(t_m_db_interface_config) 2.接口日志表(t_m_db_interface_log) 3.前端配置页面 查询页 ...

  6. 动态SQL和PL/SQL的EXECUTE选项分析

    EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...

  7. 使用Statement对象执行静态sql语句

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java ...

  8. oracle监听动态注册与静态注册

    client端如果想要连接到远程的数据库服务器,首先数据库服务器必须启动监听器 oracle监听器的配置在$ORACLE_HOME/network/admin/listener.ora,打开这个文件, ...

  9. Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)

    如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧, 结合个人经验常见如下问题:          . 对SQL语句本身进行优化以便获得更优的 ...

  10. sql存储过程比sql语句执行慢很多

    参数嗅探的问题 原因:(1)可能是发生了参数嗅探,第一次赋给存储过程的输入参数,会为该存储过程生成一个基于输入参数的执行计划,因此如果第一次输入的参数不具有代表性(例如大部分查询输入的参数都是A值,但 ...

随机推荐

  1. day02-Redis命令

    Redis命令 1.Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,value的类型多种多样,value常见的八种类型: Redis支持五种基本的数据 ...

  2. 【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范

    前言 本文介绍 vue3-element-admin 如何通过 Husky + Lint-staged + Commitlint + Commitizen + cz-git 来配置 Git 提交代码规 ...

  3. 详解Redis三大集群模式,轻松实现高可用!

    1. Redis集群简介 1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性.数据分片和负载均衡的技术.它允许Redis在不同节点上同时提供服务,提高整 ...

  4. Centos 安装 python3.x 为默认

    CentOS 7 中默认安装了 Python,但是版本是2.x的,由于2020年python2.x将停止更新,因此需要将版本升级至3.x.但由于python2.x是系统集成的,很多命令都是要基于pyt ...

  5. 性能_2 Jmeter脚本增强

    一.写脚本注意事项(回顾): 协议: http,https必须写 域名或ip: 不能有/ 请求方法: 看清楚接口文档 路径: 不要把 域名和ip再次 路径中,前后空格要看清楚 %20 空格的urlen ...

  6. Pwn系列之Protostar靶场 Stack0题解

    前提学习 GDB反调试相关 设置反汇编代码格式为intel格式 set disassembly-flavor intel 反汇编函数 disas/disass/disassemble 函数名/起始地址 ...

  7. iframe分栏拖拽伸缩例子

    这个标题有些绕口,鄙人愚笨,实在找不到一个比较准确的说法,总之就是: 一个页面内显示多个iframe,一个变宽,另一个就变窄,一个变高,另一个就变矮的这种可自由伸缩的效果.它们之间有一个可多拽的分隔条 ...

  8. flask之数据模型flask-sqlalchemy

    一.安装数据库连接依赖包 pip install flask-sqlalchemy pip install pymysql 二.项目配置 app/__init__.py from flask_sqla ...

  9. MultiBoot SPI

    对于7系列FPGA来说,计算器件启动时间按照以下公式: Config time = Bitstream size / (Config clk freq * Config interface width ...

  10. 02-初识Verilog

    1.开发环境搭建 需要使用的软件: QuartusII ModelSim Visio Notepad++ 2.初识Verilog 2.1 Verilog HDL简介 Verilog HDL是一种硬件描 ...