社区
MS-SQL Server
帖子详情
cross join 效率问题
HHH3000
2009-09-16 10:22:16
由于需要补齐交叉数据,所以用到cross join, 但是cross join后高达8w多行数据,
效率也是一落千丈,请问有什么好办法解决这个效率问题么?或者有没有别的好方法做交叉数据补齐的?
...全文
493
19
打赏
收藏
cross join 效率问题
由于需要补齐交叉数据,所以用到cross join, 但是cross join后高达8w多行数据, 效率也是一落千丈,请问有什么好办法解决这个效率问题么?或者有没有别的好方法做交叉数据补齐的?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SQL77
2009-09-16
打赏
举报
回复
就FULL JOIN
david0927cs2006
2009-09-16
打赏
举报
回复
学习学习
接分
htl258_Tony
2009-09-16
打赏
举报
回复
FULL JOIN应该能解决楼主的问题。
HHH3000
2009-09-16
打赏
举报
回复
解决了,下面我说一下问题所在
下面是查询语句结构:
select a.colum,b.colum,c.colum
from (... where xxx) a
cross join
(... where xxx) b
cross join
(... where xxx) c
子查询a,b,c的执行时间都是1秒
问题出在子查询c上面,子查询c的语句结构如下:
(select m.colum,n.colum from m
cross join n
where n.nnn=.... and m.mmm=...) c
表n和表m的nnn字段,mmm字段都有索引
现在增加子查询e和f,他们实际上就是表m和表n,与子查询c通过主键inner连接
将子查询c中的where条件拿出来,放到整个查询的where条件下,并将条件的所属表改为子查询e和f
47秒变1秒,下面是改后的语句结构:
select a.colum,b.colum,c.colum
from (... where xxx) a
cross join
(... where xxx) b
cross join
(select m.mid,n.nid from m
cross join n ) c
inner join
m on m.id=c.mid
inner join
n on n.id=c.nid
where n.nnn=.... and m.mmm=...
查询方面我算是个菜鸟,执行计划不会看,
不知道是不是笛卡尔积嵌套笛卡尔积在加条件会影响效率,
总之解决方法如上,如果有高人希望讲讲原理,谢谢
HHH3000
2009-09-16
打赏
举报
回复
回js_szy,引用错了,是你楼上的说的不太对
华夏小卒
2009-09-16
打赏
举报
回复
[Quote=引用 12 楼 hhh3000 的回复:]
引用 10 楼 js_szy 的回复:
a中的每一条记录都会与B中的所有记录,去匹配。
所以会产生m*n条记录
此言差矣,每个子查询的执行时间都在1秒内,联合起来就是47秒
[/Quote]
我说的不对?
guguda2008
2009-09-16
打赏
举报
回复
FULL JOIN ON A.ID=B.ID OR A.ID<>B.ID
试试
HHH3000
2009-09-16
打赏
举报
回复
[Quote=引用 10 楼 js_szy 的回复:]
a中的每一条记录都会与B中的所有记录,去匹配。
所以会产生m*n条记录
[/Quote]
此言差矣,每个子查询的执行时间都在1秒内,联合起来就是47秒
xuejiecn
2009-09-16
打赏
举报
回复
如LZ所说,应该是查询A,B,C中的效率问题,与cross join无关。
华夏小卒
2009-09-16
打赏
举报
回复
a中的每一条记录都会与B中的所有记录,去匹配。
所以会产生m*n条记录
xuejiecn
2009-09-16
打赏
举报
回复
A cross join B 得到的结果就是A中的每一条与B中的所有记录组合得到的结果。
华夏小卒
2009-09-16
打赏
举报
回复
.
HHH3000
2009-09-16
打赏
举报
回复
下面是查询语句结构:
select a.colum,b.colum,c.colum
from (... where xxx) a
cross join
(... where xxx) b
cross join
(... where xxx) c
又试了试,去掉了a,b,c子查询中的一些where条件,查询效率猛增,对cross join的执行过程还是不甚了解
--小F--
2009-09-16
打赏
举报
回复
[Quote=引用 4 楼 xuejiecn 的回复:]
引用 3 楼 fredrickhu 的回复:
cross join 应该也能加索引吧 连接字段/
cross join也可以有连接字段??
A cross join B
A有m条,b有n条,则结果有m*n条了
[/Quote]
这个我知道
xuejiecn
2009-09-16
打赏
举报
回复
补齐数据,一般 用外连接吧?
LZ说说你的情况,看有别的办法没?
xuejiecn
2009-09-16
打赏
举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
cross join 应该也能加索引吧 连接字段/
[/Quote]
cross join也可以有连接字段??
A cross join B
A有m条,b有n条,则结果有m*n条了
--小F--
2009-09-16
打赏
举报
回复
cross join 应该也能加索引吧 连接字段/
soft_wsx
2009-09-16
打赏
举报
回复
详细一点,8W也不多呀!
--小F--
2009-09-16
打赏
举报
回复
2005试一下CROSS APPPLY
SQL联合查询inner
join
、outer
join
和c
ros
s
join
的区别详解
今天小编就为大家分享一篇关于SQL联合查询inner
join
、outer
join
和c
ros
s
join
的区别详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
详解Mysql多表联合查询
效率
分析及优化
1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为C
ROS
S
JOIN
或者省略C
ROS
S即
JOIN
,或者使用’,’ 如: SELECT * FROM table1 C
ROS
S
JOIN
table2 SELECT * FROM table1
JOIN
table2 SELECT * FROM table1,table2 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER]
JOIN
或者RIGHT [OUTER]
JOIN
2.
SQL高级查询技术.doc
SQL高级查询技术.doc
aspectjrt.jar,aspectjweaver.jar
还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。 aspectjrt.jar,aspectjweaver.jar
mysql
join
与 c
ros
s
join
效率
_Mysql
Join
语法解析与性能分析
一.
Join
语法概述
join
用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT
JOIN
table2 ON conditionatable1:左表;table2:右表。
JOIN
按照功能大致分为如下三类:INNER
JOIN
(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。LEFT
JOIN
(左连接):取得左表(table1)完全记录...
MS-SQL Server
34,838
社区成员
254,632
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章