日期:2014-05-17  浏览次数:20403 次

问 这 3个 SQL 语句 有什么区别和优劣
SELECT * FROM A JOIN B ON A.id = B.id JOIN C ON C.id = A.id WHERE C.distinction = 1

SELECT * FROM A JOIN B ON A.id = B.id JOIN C ON C.id = A.id AND C.distinction = 1

SELECT * FROM A JOIN B ON A.id = B.id JOIN (SELECT id FROM C WHERE distinction = 1) C ON C.id = A.id


当数据量很多的情况下哪个查询数度快点?
sql 数据 select

------解决方案--------------------
第一句是给他条件查询符合C.distinction = 1的数据,这个查询范围就小了
第二句查询是所有匹配的都查询到,查询结果数据就比第一句多
第三句和第二句查询差不多。
个人还是觉得第一句速度快点,也是你想要的结果
------解决方案--------------------
where 后面的是过滤条件, on后面的是连接条件,所以1和2在有些情况下结果不同。
------解决方案--------------------
首先,三条语句的结果是相同的。
三语句执行时,优化器会对其优化,正常情况下效率是相当的。但是未必是相同语义最快的语句,有时候需强制查询按指定顺序执行。
------解决方案--------------------
第二个查询,最后一个条件不应该放到on,on是关联用的,where是筛选用的,哪个快,放到一个查询界面,开启执行计划,同时执行,看看开销,基本上就有个大概了
------解决方案--------------------
第三个最快吧