动态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值,但 ...
随机推荐
- 高可用(keepalived)部署方案
前言:为了减少三维数据中心可视化管理系统的停工时间,保持其服务的高度可用性.同时部署多套同样的三维可视化系统,让三维数据中心可视化系统同时部署并运行到多个服务器上.同时提供一个虚拟IP,然后外面通过这 ...
- 用Abp实现找回密码和密码强制过期策略
@ 目录 重置密码 找回密码 发送验证码 校验验证码 发送重置密码链接 创建接口 密码强制过期策略 改写接口 Vue网页端开发 重置密码页面 忘记密码控件 密码过期提示 项目地址 用户找回密码,确切地 ...
- 【SpringBoot2】 SpringBoot2核心技术 基础
写在前面 1 SpringBoot2核心技术 基础 1.1 Spring与SpringBoot SpringBoot是一个高层框架 1.2 项目创建 1.2.1 创建POM ①导入spring-boo ...
- 微软出品的UI自动化测试工具Playwright(三)
微软出品的UI自动化测试工具Playwright(三) 网址 说明 https://playwright.dev/ 官网首页 https://playwright.dev/python/docs/in ...
- 自定义Feign拦截器
简介 Feign的拦截器RequestInterceptor SpringCloud的微服务使用Feign进行服务间调用的时候可以使用RequestInterceptor统一拦截请求来完成设置head ...
- 一文详解RocketMQ-Spring的源码解析与实战
摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑. 本文分享自华为云社区< ...
- Ffmpeg 视频压缩的几个关键参数
Ffmpeg的视频操作官网文档:https://ffmpeg.org/ffmpeg-filters.html#Video-Filters 视频压缩用到的参数主要为以下几个: 文件路径:-i 输入文件的 ...
- [Pytorch框架] 2.3 神经网络简介
文章目录 2.3 神经网络简介 概述 神经网络的表示 激活函数 为什么激活函数都是非线性的 sigmod 函数 tanh 函数 ReLU 函数 Leaky Relu 函数 深入理解前向传播和反向传播 ...
- Centos7 部署Django项目 uwsgi + nginx
启动 首先确保你的django项目是可以在虚拟环境中跑起来的,环境管理窝用的是pyenv,pyenv不知道什么东西的可以参考窝之前写过的Pyenv环境管理的安装文. 项目启动 python manag ...
- css设置单行多行超出显示省略号
单行: width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 多行: text-overflow: ...