SQL优化

最近在做一个项目的时候,要连接几张表,筛选出一堆数据出来,但是写了SQL之后,查询效率很不理想,于是详细看了下SQL查询语句的原理:

一、查询的逻辑执行顺序
  (1) FROM left_table
  (3) join_type JOIN right_table (2) ON join_condition
  (4) WHERE where_condition
  (5) GROUP BY group_by_list
  (6) WITH {cube | rollup}
  (7) HAVING having_condition
  (8) SELECT (9) DISTINCT (11) top_specification select_list
  (9) ORDER BY order_by_list

二:知道当前是ORACLE数据库还是MYSQL数据库,因为不同的数据库在解析代码顺序上有些差异,oracle是从下向上,从右往左的执行顺序,因此:

     (1)在使用where筛选条件时,倾向于将筛选数据量大的条件放在最后;

     (2)在使用内连接表的时候,通常会使用最右边的表当作驱动表;如果是外连接,比如左连接或者是右连接,应该对应左右表来当驱动表;

     (3)尽量不用嵌套查询,就像嵌套for循环一样,那样查的数据次数会爆炸的;

     (4)合理选择使用in或者exists,外表数据量大,内表数据量小建议用in或者not in;外表数据量小,内表数据量大,建议用not exists或者exists;

     (5)还有一些简单的优化就不说了,都是一些常识吧;

三:在确定这些都用的情况下,效率还是很低,可以尝试使用索引或者是这样:

   查询当前的执行计划,看下软件本身是从哪里开始执行的,然后适当修改顺序和查询方式来优化;

 

总结:这篇博客写的很,没新意,但是作为新手,我希望通过多看点,写点东西,让自己学会成长,学会不再偷懒的只是当时的看下就过去了;

转载于:https://www.cnblogs.com/pingguoyaoleyikou/p/6003985.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值