本文实例总结了常用SQL语句优化技巧。分享给大家供大家参考,具体如下:

除了建立索引之外,保持良好的SQL语句编写习惯将会降低SQL性能问题发生。
①通过变量的方式来设置参数
好:
stringsql = "select * from people p where p.id = ? ";
坏:
stringsql = "select * from people p where p.id = "+id;
数据库的SQL文解析和执行计划会保存在缓存中,但是SQL文只要有变化,就得重新解析。
“…where p.id = ”+id的方式在id值发生改变时需要重新解析,这会耗费时间。
②不要使用select *
好:
stringsql = "select people_name,pepole_age from people ";
坏:
stringsql = "select * from people ";
使用select *的话会增加解析的时间,另外会把不需要的数据也给查询出来,数据传输也是耗费时间的,
比如text类型的字段通常用来保存一些内容比较繁杂的东西,如果使用select *则会把该字段也查询出来。
③谨慎使用模糊查询
好:
stringsql = "select * from people p where p.id like 'parm1%' ";
坏:
stringsql = "select * from people p where p.id like '%parm1%' ";
当模糊匹配以%开头时,该列索引将失效,若不以%开头,该列索引有效。
④不要使用列号
好:
stringsql = "select people_name,pepole_age from people order by name,age";
坏:
stringsql = "select people_name,pepole_age from people order by 6,8";
使用列号的话,将会增加不必要的解析时间。
⑤优先使用UNION ALL,避免使用UNION
好:
stringsql = "select name from student union all select name from teacher";
坏:
stringsql = "select name from student union select name from teacher";
UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况,如果业务上能够确保不会出现重复记录。
⑥在where语句或者order by语句中避免对索引字段进行计算操作
好:
stringsql = "select people_name,pepole_age from people where create_date=date1 ";
坏:
stringsql = "select people_name,pepole_age from people where trunc(create_date)=date1";
当在索引列上进行操作之后,索引将会失效。正确做法应该是将值计算好再传入进来。
⑦使用not exist代替not in
好:
stringsql = "select * from orders where customer_name not exist (select customer_name from customer)";
坏:
stringsql = "select * from orders where customer_name not in(select customer_name from customer)";
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。
⑧ exist和in的区别
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。因此,in用到的是外表的索引, exists用到的是内表的索引。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
⑨避免在索引列上做如下操作:
◆避免在索引字段上使用<>,!=
◆避免在索引列上使用IS NULL和IS NOT NULL
◆避免在索引列上出现数据类型转换(比如某字段是String类型,参数传入时是int类型)
当在索引列上使用如上操作时,索引将会失效,造*表扫描。
⑩复杂操作可以考虑适当拆成几步
有时候会有通过一个SQL语句来实现复杂业务的例子出现,为了实现复杂的业务,嵌套多级子查询。造成SQL性能问题。对于这种情况可以考虑拆分SQL,通过多个SQL语句实现,或者把部分程序能完成的工作交给程序完成。
PS:这里再为大家推荐2款SQL在线工具供大家参考使用:
SQL在线压缩/格式化工具:
http://tools./code/sql_format_compress
sql代码在线格式化美化工具:
http://tools./code/sqlcodeformat
希望本文所述对大家数据库程序设计有所帮助。
# SQL语句
# 优化
# 浅谈MySQL中优化sql语句查询常用的30种方法
# sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
# SQLServer 优化SQL语句 in 和not in的替代方案
# SQL SERVER 的SQL语句优化方式小结
# MySQL SQL语句优化的10条建议
# Mysql查询最近一条记录的sql语句(优化篇)
# SQL Server中的SQL语句优化与效率问题
# SQL语句优化方法30例(推荐)
# 如何优化SQL语句的心得浅谈
# 你真的知道怎么优化SQL吗
# 将会
# 表上
# 的是
# 会有
# 多个
# 不需要
# 效率高
# 给大家
# 这种情况
# 就得
# 会把
# 几步
# 较小
# 会将
# 来实现
# 也给
# 若不
# 则会
# 能满足
# 这会
相关文章:
全景视频制作网站有哪些,全景图怎么做成网页?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何在建站主机中优化服务器配置?
金*站制作公司有哪些,金华教育集团官网?
如何用美橙互联一键搭建多站合一网站?
如何在宝塔面板创建新站点?
如何通过VPS建站无需域名直接访问?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何选择高效便捷的WAP商城建站系统?
建站主机与服务器功能差异如何区分?
广东企业建站网站优化与SEO营销核心策略指南
建站org新手必看:2024最新搭建流程与模板选择技巧
已有域名和空间如何搭建网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
如何通过商城自助建站源码实现零基础高效建站?
公司网站设计制作厂家,怎么创建自己的一个网站?
名字制作网站免费,所有小说网站的名字?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何快速搭建高效可靠的建站解决方案?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何用5美元大硬盘VPS安全高效搭建个人网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
婚礼视频制作网站,学习*后期制作的网站有哪些?
宿州网站制作公司兴策,安徽省低保查询网站?
建站主机选购指南:核心配置优化与品牌推荐方案
佛山网站制作系统,佛山企业变更地址网上办理步骤?
郑州企业网站制作公司,郑州招聘网站有哪些?
香港服务器选型指南:免备案配置与高效建站方案解析
ui设计制作网站有哪些,手机UI设计网址吗?
如何破解联通资金短缺导致的基站建设难题?
建站之星收费标准详解:套餐费用及年费价格表一览
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
建站之星后台密码遗忘如何找回?
大型企业网站制作流程,做网站需要注册公司吗?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何将凡科建站内容保存为本地文件?
如何通过商城免费建站系统源码自定义网站主题?
如何用虚拟主机快速搭建网站?详细步骤解析
建站主机无法访问?如何排查域名与服务器问题
红河网站制作公司,红河事业单位身份证如何上传?
自助网站制作软件,个人如何自助建网站?
如何在香港免费服务器上快速搭建网站?
如何快速搭建高效WAP手机网站吸引移动用户?
孙琪峥织梦建站教程如何优化数据库安全?
如何通过多用户协作模板快速搭建高效企业网站?
简单实现Android验证码
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站之星在线客服如何快速接入解答?
网站制作网站,深圳做网站哪家比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。