2 u013179958 u013179958 于 2016.01.28 20:34 提问

问题中的这两种SQL哪个效率高?
sql
SELECT T3.ID,T3.NAME
FROM ZY_UNIT_WARD T1 
LEFT JOIN XT_UNIT T2 ON T1.UNITID=T2.ID
LEFT JOIN zy_ward T3 ON T2.ID=T3.UNITID
WHERE T2.ID=8

SELECT T1.ID,T1.NAME FROM zy_ward T1,XT_UNIT T2,ZY_UNIT_WARD T3
WHERE T1.ID=T3.WARDID AND T2.ID=T3.UNITID

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.28 21:08
已采纳

前者效率高,后者是取笛卡儿积,相当于二重循环,复杂度N^2,前者是hash匹配,复杂度LogN

qq_29312259
qq_29312259 回复据说名字太长不容易被发现: 内连接,外连接,交叉连接都是笛卡尔积,你的第一个是外连接,第二个是内链接
接近 2 年之前 回复
wszde2
wszde2 inner join就是楼主说的第二种查询,你自己也说是笛卡尔查询,还有你根本不懂外链的查询方式,外链查询在某种情况下和内链结果是一致的。还有这两种比较效率没意义,就算第一种效率高也不能代替第二种,先自己了解了再发表评论。
接近 2 年之前 回复
u013179958
u013179958 回复caozhy: 哦
接近 2 年之前 回复
caozhy
caozhy 回复据说名字太长不容易被发现: wszde2 我不知道他说的outer join/inner join也是笛卡尔集的观点从哪里听来的。但是我所知道的常用数据库(mssql mysql oracle)都是直接hash比较。
接近 2 年之前 回复
u013179958
u013179958 楼下说的有道理吗
接近 2 年之前 回复
wszde2
wszde2   2016.01.28 22:15

晕,这两个是不同的sql,一个是外链一个是内链查询的结果不一样的,不能通用,这就像是说delete和update效率那个高!!

u013179958
u013179958 回复wszde2: 哦
接近 2 年之前 回复
wszde2
wszde2 回复据说名字太长不容易被发现: 左外链以左表为主也是使用笛卡尔集查询但保留左表未适配的结果,两者复杂度一样的,但删选程度不同
接近 2 年之前 回复
u013179958
u013179958 楼上说了,复杂度都不同
接近 2 年之前 回复
rui888
rui888   Ds   Rxr 2016.01.29 09:52

放在数据库中执行看看就知道了。看看执行计划,找出问题点。

lahand
lahand   2016.01.28 20:47

其实都差不多,第二个SQL的查询方法等于inner join

Csdn user default icon
上传中...
上传图片
插入图片