sql server2008处理笛卡儿积的逻辑——记一次解决疑惑

本文通过实验探讨了SQL Server 2008中笛卡儿积的执行顺序问题,发现系统会优先扫描元组数量较少的表,并通过实例验证了这一结论。

环境:sql server 2008

背景:几天前,我在ssms上实验笛卡儿积——cross join/, ,发现我运行的结果不太正常——重复元组出现在右边,理解不了。众所周知,两个表进行笛卡儿积其实是从一个表的每个元组出发,依次扫描另一个表。但是,我以为这里先扫描的表是左表,经过一番测试,先扫描的表原来是元组数相对少的那个表。

测试:

step1:

几天前,我依次创建了两个表:Student1 、SC1,当时是逐行insert的。然后进行笛卡儿积:select * from Student1,SC1;

发现不对啊!重复项在后面是什么鬼!几番调试后,发现还是这个鬼样子。就怀疑是我创建表的方法有问题,就改成了全部元组一起insert,如下图:

结果并没有什么改变。。

无聊地换一下连接顺序:select * from SC1,Student1;咦,重复项出现在左边了,而且还是SC1表的每个元组在重复,这样就正确了。



为什么呢?难道是系统读表顺序问题?先读后创建的表?




那这个怎么解释呢?

应该是先读元组少的表啊!

验证如下:



确实是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值