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