多表查询效率

烟灰洒落键盘 2012-05-07 11:10:51
比如说A,B,C,。。。
SELECT .. FROM
A,
B,
C,
。。。
WHERE
A.xx=B.xx AND
B.xx=C.xx AND
...

SELECT ...
FROM
A INNER JOIN B ON A.xx=B.xx.... INNER JOIN C ON B.xx=C.xx ...
这样的查询效率有什么区别,然后就是多表查询(一般6个左右的表)联合查询时如何查询效率更高?比如6个表中有2个表的数据在几百W,其他的几个表数据只有几W行。
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是等价的。但是执行的顺序不是一样的,具体分析看一下资料:


SQL Select语句完整的执行顺序:

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。


另外:一个查询语句各个部分的执行顺序:
--8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
--(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>
--(10) ORDER BY <order_by_list>

对where,group by,order by 字段加索引,还有就是合理的语句,尽量避免一些复杂的计算
Aaron_Chan 2012-05-07
  • 打赏
  • 举报
回复

--求答案。
Aaron_Chan 2012-05-07
  • 打赏
  • 举报
回复

---专门支持!
manbufenglin 2012-05-07
  • 打赏
  • 举报
回复
当然了解SQL执行顺序很有必要,在这个基础上,针对大数据量多表间关联时,
可以考虑SQL CTE的形式,及临时表。
CTE:

;with A as(
select t1.*,t2.xxx,t3.yyyy
from t1
inner join t2
on t1.x=t2.x
inner join t3
on t1.y=t3.y
),B as(
select t4.yyyy,t4.ZZZZZ
from t4
)
select A.*,B.ZZZZZ
from A
inner join B
on A.yyyy=B.yyyy


临时表:

select t1.*,t2.xxx,t3.yyyy
from t1
into #A
inner join t2
on t1.x=t2.x
inner join t3
on t1.y=t3.y;

select t4.yyyy,t4.ZZZZZ
from t4
into #B;

select #A.*,#B.ZZZZZ
from #A
inner join #B
on #A.yyyy=#B.yyyy

--别忘drop掉临时表
drop table #A
drop table #B


一般情况下以上两种在某种程度上都能提供查询效率!!


[Quote=引用 3 楼 的回复:]
是等价的。但是执行的顺序不是一样的,具体分析看一下资料:


SQL code


SQL Select语句完整的执行顺序:

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
……
[/Quote]

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧