当前位置: 首页 > news >正文

网站建设区别广安市邻水建设局网站

网站建设区别,广安市邻水建设局网站,企业画册设计制作公司,QQ群采集到wordpress文章目录 where 11问题描述错误实现正确实现性能对比测试 where 11 问题描述 在动态 SQL 拼接场景中,开发者常使用 WHERE 11 简化条件拼接逻辑(避免处理首个条件的 AND)。理论上,数据库优化器会忽略 11,但字符串拼接…

文章目录

  • where 1=1
    • 问题描述
    • 错误实现
    • 正确实现
    • 性能对比测试

where 1=1

问题描述

在动态 SQL 拼接场景中,开发者常使用 WHERE 1=1 简化条件拼接逻辑(避免处理首个条件的 AND)。理论上,数据库优化器会忽略 1=1,但字符串拼接可能带来性能损耗,部分数据库优化器可能无法完全优化 1=1,导致索引失效或全表扫描。建议使用<where> 标签替代 WHERE 1=1 。

错误实现

select *
from job_info
where 1=1
<if test="jobName != null and jobName != '' "><bind name="jobNameBind" value="'%' + jobName + '%'"/>and job_name like #{jobNameBind}
</if>

正确实现

select *
from job_info
<where>
<if test="jobName != null and jobName != '' "><bind name="jobNameBind" value="'%' + jobName + '%'"/>job_name like #{jobNameBind}
</if>
</where>

性能对比测试

  • 数据库:mysql-8.0.29

  • EXPLAIN测试对比:

EXPLAIN SELECT * FROM koca_order WHERE 1=1 AND order_id > 1012EXPLAIN SELECT * FROM koca_order WHERE order_id > 1012
idselect_typetypepossible_keysrowsfilteredExtra
1SIMPLEALLPRIMARY60033.33Using where
  • JMH测试:
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
@Fork(3)
@Warmup(iterations = 5, time = 2)
@Measurement(iterations = 5, time = 5)
@Threads(16)
public class WhereConditionBenchmark {private List<String> conditions;@Setuppublic void setup() {// 模拟 5 个动态查询条件conditions = Arrays.asList("age > 18", "status = 1", "name LIKE 'John%'", "city = 'NY'", "score >= 60");}/*** 原始实现:使用 WHERE 1=1 简化拼接*/@Benchmarkpublic void withDummyCondition(Blackhole bh) {StringBuilder sql = new StringBuilder("SELECT * FROM users WHERE 1=1");for (String cond : conditions) {sql.append(" AND ").append(cond);}bh.consume(sql.toString()); // 避免 JIT 优化}/*** 优化实现:直接拼接 WHERE 条件*/@Benchmarkpublic void withoutDummyCondition(Blackhole bh) {StringBuilder sql = new StringBuilder("SELECT * FROM users");boolean first = true;for (String cond : conditions) {if (first) {sql.append(" WHERE ");first = false;} else {sql.append(" AND ");}sql.append(cond);}bh.consume(sql.toString());}}

测试结果:

Benchmark                                          Mode  Cnt      Score      Error   Units
TT.WhereConditionBenchmark.withDummyCondition     thrpt   15  16509.986 ± 3028.386  ops/ms
TT.WhereConditionBenchmark.withoutDummyCondition  thrpt   15  20124.583 ±  420.773  ops/ms

测试结论:

移除冗余的 WHERE 1=1 后,吞吐量提升约 21.9%,说明 1=1 对动态 SQL 生成性能有明显影响。

http://www.dtcms.com/a/540331.html

相关文章:

  • 网站中的文字滑动怎么做化妆品网站建设策略
  • 【Netty4核心原理⑮】【Netty 编解码的艺术】
  • PHP-Casbin 在分布式服务中利用 Watcher 做策略同步
  • OCP考试必须培训吗?费用多少?
  • SpringBoot + 百度内容安全实战:自定义注解 + AOP 实现统一内容审核(支持文本 / 图片 / 视频 + 白名单 + 动态开关)
  • 心智结构与组织学习
  • NAS 私有云零信任部署:cpolar 加密访问 + 本地存储,破解安全与便捷难题
  • C++面向对象继承全面解析:不能被继承的类、多继承、菱形虚拟继承与设计模式实践
  • 只做财经的网站厦门高端网站建设公
  • 星宿网站建设系统开发过程中原型有哪些作用
  • Angular 入门项目
  • 架构解析:衡石科技如何基于AI+Data Agent重构智能数据分析平台
  • 云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
  • AR技术如何确保数据准确无误?
  • Python-openai对话LLM
  • 智慧码垛系统介绍
  • Axure高保真View Design框架元件库
  • 网站 linux 服务器昆明企业网站开发公司
  • 网站介绍经过下拉怎么做wordpress统计访问ip
  • 济南品牌网站建设低价wordpress建站要钱吗
  • DHT11温湿度传感器Linux驱动开发完整流程
  • EMD-SVM 太阳能功率预测
  • FFMPEG-1:下载与安装,文件组成,ffmpeg -h 命令汇总,练习使用 ffmpeg、ffplay、ffprobe,
  • 蚂蚁开源高性能扩散语言模型框架dInfe,推理速度提升十倍
  • DVWA靶场通关笔记
  • transformer结构
  • Spring Boot 移除 Undertow:技术背景、迁移方案与避坑指南(附源码级解析)
  • 龙岩食品有限公司搜索引擎优化的英文缩写
  • 【Linux】进程状态|优先级|进程切换|环境变量
  • 2025智能体元年:AI重塑产业格局