拾光记录
218个文档 导航 作者 Gitee
随笔记录4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端知识4
基础知识17
Vue框架19
UniApp14
微信小程序1
Java编程6
Java基础15
SpringBoot31
SpringMVC18
MyBatis9
SpringCloud15
中间件2
数据库4
MySQL13
Redis8
MongoDB10
其他数据库1
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv管理工具
Linux12
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:NiriArchLinux:模块记录
软件工具12
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaRustFSPicGoVSCodeDocker
创意设计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()去重函数存在查找语句优化普通方式优化方案