首页 > 数据库 >关于日常开发中的一些小的SQL优化建议

关于日常开发中的一些小的SQL优化建议

时间:2023-08-19 13:01:20浏览次数:69  
标签:WHERE 可以 SQL 使用 查询 操作符 日常 子句 优化

优化建议:

  1. 索引优化:根据查询条件和连接条件创建索引,可以提高查询性能(有连表查询时,连表关联字段添加上索引)。
  2. 子查询优化:将子查询改为连接查询,可以提高查询性能。具体可以考虑将es_info_relation_owner表的子查询改为连接查询。
  3. 避免使用DISTINCT关键字:如果查询结果中有重复的记录,可以考虑使用GROUP BY来替代DISTINCT,可以提高查询性能。
  4. 避免使用IFNULL函数:可以考虑使用COALESCE函数来替代IFNULL函数,COALESCE函数在MySQL中的性能更好。
SELECT COALESCE(null,null,'测试'); -- 结果:测试
  1. 避免在WHERE子句中使用函数:可以将函数的结果保存到变量中,然后在WHERE子句中使用变量,可以提高查询性能。
  2. 避免在WHERE子句中使用OR操作符:可以将OR操作符拆分成多个条件,使用UNION或者UNION ALL来合并结果,可以提高查询性能。
  3. 避免在WHERE子句中使用!=操作符:可以使用<>操作符来替代!=操作符,可以提高查询性能。

Mybatis 动态拼接语句时候经常使用到 大于(>,>=)、小于(<,<=)、不等于(<> ,!=)符号。由于此符号包含了尖括号,Mybatis使用的 *.xml文件格式。在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯

符号

原符号

替换符号

小于

<

&lt;

小于等于

<=

&lt;=

大于

>

&gt;

大于等于

>=

&gt;=

不等于

<>

&lt;&gt;


&

&amp;

单引号


&apos;

双引号

"

&quot;

  1. 避免在WHERE子句中使用IN操作符:可以将IN操作符拆分成多个条件,使用UNION或者UNION ALL来合并结果,可以提高查询性能。
  2. 避免在WHERE子句中使用LIKE操作符:如果可能的话,可以使用等于操作符来替代LIKE操作符,可以提高查询性能。
  3. 避免在WHERE子句中使用通配符:%:如果可能的话,可以使用等于操作符来替代通配符:%,可以提高查询性能。
  4. 避免在WHERE子句中使用函数:如果可能的话,可以将函数的结果保存到变量中,然后在WHERE子句中使用变量,可以提高查询性能。

关于日常开发中的一些小的SQL优化建议_SQL

待续....

标签:WHERE,可以,SQL,使用,查询,操作符,日常,子句,优化
From: https://blog.51cto.com/u_16226278/7148774

相关文章

  • rhel 6.5以编译方式安装mysql 5.5.18
    文档课题:rhel6.5以编译方式安装mysql5.5.18数据库:mysql5.5.18系统:rhel6.564位安装包:mysql-5.5.18.tar.gz1、卸载MariaDB--卸载系统自带的mysql和mariadb-lib.[root@MySQL5518-Master~]#rpm-qa|grepmysqlmysql-libs-5.1.71-1.el6.x86_64[root@MySQL5518-Master~......
  • [SQL Server---For XML PATH 的运用]
    SELECTA.CID,B.TrueNameinto#UserNameFROMRH_CommuUserRoleAWITH(NOLOCK)LeftjoinRH_UserBWITH(NOLOCK)onA.UserID=B.idANDA.UType=1WHEREB.UserState=1selectCID,TrueName=STUFF((select','+ltrim(TrueName)from#UserNamewhereCID=t.CIDfo......
  • SQLserver批量批量导出索引
    WITHindexInfoas(SELECTSCHEMA_NAME(t.schema_id)[schema_name],t.nameas[table_name],t1.nameas[index_name],t1.type,t1.type_desc,t1.is_unique,t1.is_primary_key,t1.is_unique_constraint,t1.has_filter,t1.filter_definition,STUFF((SELECT�......
  • 【LeetCode1225. 报告系统状态的连续日期】MySQL使用lag,lead得到连续段的:开始标志,结束
    目录题目地址题目描述代码题目地址https://leetcode.cn/problems/report-contiguous-dates/description/题目描述Asystemisrunningonetaskeveryday.Everytaskisindependentoftheprevioustasks.Thetaskscanfailorsucceed.Writeasolution toreportth......
  • SQL server表锁
    --查询出锁表进程selectrequest_session_idspid,OBJECT_NAME(resource_associated_entity_id)tableNamefromsys.dm_tran_lockswhereresource_type='OBJECT'--需要将锁表进程@spid换成上面查询出来的锁表进程号declare@spidintSet@spid=65--锁表进程declare@......
  • 开源数据库Mysql_DBA运维实战 (总结)
    开源数据库Mysql_DBA运维实战(总结)SQL语句都包含哪些类型DDLDCLDMLDQLYum安装MySQL的配置文件配置文件:/etc/my.cnf日志目录:/var/log/mysqld.log错误日志:/var/log/mysql/error.logMySQL的主从切换查看主从复制状态停止主数据库的写入操作记录当前二级制日志文件和位置更新从数据库......
  • 启动mysql时报错"/etc/init.d/mysqld: Permission denied"
    问题描述:启动mysql时报错"/etc/init.d/mysqld:Permissiondenied",如下所示:数据库:mysql5.5.18系统:rhel6.51、异常重现[root@MySQL5518-Master~]#servicemysqldstartenv:/etc/init.d/mysqld:Permissiondenied2、解决步骤[root@MySQL5518-Master~]#ll/etc/init.d......
  • 【LeetCode173. 最多连胜的次数】MySQL用户变量编程解法
    目录题目地址题目描述代码题目地址https://leetcode.cn/problems/longest-winning-streak/description/题目描述选手的 连胜数是指连续获胜的次数,且没有被平局或输球中断。编写解决方案来计算每个参赛选手最多的连胜数。结果可以以任何顺序返回。代码WITHt1AS(......
  • iwebsec-sql注入 13 二次注入
    01、题目分析二次注入的原理是先把sql注入语句存放在数据库中,然后第二次通过调用数据库的数据(提前放置好的注入语句),然后进行sql注入那么我们先将注册用户,将sql语句存放在数据库中,然后通过找回密码操作,数据库会自动调取数据库中的数据,就执行了我们的sql语句02、手工注入二次注......
  • Java智慧工地系统源码(微服务框架+Java+MySQL)
    智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需......