logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端编程3
前端基础知识16
UniApp15
Vue框架19
Java编程7
Java基础知识14
SpringBoot31
SpringMVC14
MyBatis8
SpringCloud15
RocketMQ1
MyCat1
数据库4
MySQL6
Redis7
MongoDB10
H21
Java技术栈4
知识整理分布式锁的实现方案MySQL事务MySQL的锁
软件工具箱14
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaPicGoRustFSVSCodeDockerObsidianObs录制
Linux知识11
树莓派安装及使用ArchLinux:常用软件ArchLinux:基础系统安装ArchLinux:深度优化ArchLInux:图形化界面安装ArchLinux:Nirifrp内网穿透Jar启动脚本Linux常用命令VirtualBox安装CentOSVirtualBox安装Ubuntu
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

随机查询

select * from article order by rand() limit 1

字符串拼接concat()

如果在使用MyBatis框架时常用的一种防注入的模糊查询方式,在使用MyBatis时,有两种参数占位符号:#{}%{},前者会进行安全检查和转义,后者不会,例如在模糊查询时正常逻辑为

select * from user where name like '%${name}'

但是${}不能防SQL注入,所以不安全,解决方案为使用MySQL的字符拼接函数

select * from user where name like concat('%', #{name})
select * from user where name like concat('%', #{name}, '%')

同理记录in的方式

id in
<foreach collection="ids" item="item" open="(" separatosr="," close=")">
#{ids}
</foreach>

去重函数

select count(DISTINCT ip)
from req_record

存在查找语句优化

根据条件从数据库中查询出“存在”和“不存在”两种状态,有没有效率更高的方法?

普通方式

SELECT count(*) FROM table WHERE a = 1 AND b = 2 

注意count(1)count(*)的区别

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了
从执行计划来看,count(1)count(*)的效果是一样的。但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少
如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小的
因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的
因此:count(1)count(*)基本没有差别

优化方案

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1 

SQL不再使用count,而是直接返回1,不用做统计,同时有限制LIMIT 1,让数据库查询时遇到一条就返回,不用再继续查找,业务代码中直接判断返回结果是否非空即可

随机查询
字符串拼接concat()
去重函数
存在查找语句优化
普通方式
优化方案