全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

常用SQL语句优化技巧总结【经典】

本文实例总结了常用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吗  # 将会  # 表上  # 的是  # 会有  # 多个  # 不需要  # 效率高  # 给大家  # 这种情况  # 就得  # 会把  # 几步  # 较小  # 会将  # 来实现  # 也给  # 若不  # 则会  # 能满足  # 这会 


相关文章: 如何在IIS中新建站点并解决端口绑定冲突?  已有域名和空间如何快速搭建网站?  如何选择高效响应式自助建站源码系统?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Android自定义控件实现温度旋转按钮效果  如何快速搭建高效可靠的建站解决方案?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  ,网页ppt怎么弄成自己的ppt?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何登录建站主机?访问步骤全解析  自助网站制作软件,个人如何自助建网站?  如何挑选最适合建站的高性能VPS主机?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  如何注册花生壳免费域名并搭建个人网站?  建站之星下载版如何获取与安装?  如何在Tomcat中配置并部署网站项目?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何安全更换建站之星模板并保留数据?  ppt制作免费网站有哪些,ppt模板免费下载网站?  装修招标网站设计制作流程,装修招标流程?  建站之星后台管理:高效配置与模板优化提升用户体验  建站主机选哪家性价比最高?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  制作表格网站有哪些,线上表格怎么弄?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  建站主机如何选?性能与价格怎样平衡?  独立制作一个网站多少钱,建立网站需要花多少钱?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  做企业网站制作流程,企业网站制作基本流程有哪些?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站之星伪静态规则如何正确配置?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  ,有什么在线背英语单词效率比较高的网站?  如何获取免费开源的自助建站系统源码?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何通过老薛主机一键快速建站?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何正确选择百度移动适配建站域名?  建站之星如何实现五合一智能建站与营销推广?  建站之星24小时客服电话如何获取?  nginx修改上传文件大小限制的方法  安云自助建站系统如何快速提升SEO排名?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  如何在阿里云完成域名注册与建站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。