首页 > 代码库 > SQL优化
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)还有一些简单的优化就不说了,都是一些常识吧;
三:在确定这些都用的情况下,效率还是很低,可以尝试使用索引或者是这样:
查询当前的执行计划,看下软件本身是从哪里开始执行的,然后适当修改顺序和查询方式来优化;
总结:这篇博客写的很,没新意,但是作为新手,我希望通过多看点,写点东西,让自己学会成长,学会不再偷懒的只是当时的看下就过去了;
SQL优化