* 測試,當on的條件爲false的時候,join是否會被優化?
-- 插入測試表
CREATE TABLE person (id INT NOT NULL ,NAME VARCHAR(20));
CREATE TABLE bill (id INT NOT NULL ,NAME VARCHAR(20),personId INT );
-- 插入測試數據
DELETE FROM person;
INSERT INTO person VALUES(1,"martin fowler");
INSERT INTO person VALUES(2,"rebert martin");
-- 插入測試數據
DELETE FROM bill;
INSERT INTO bill VALUES(1,"bill1",1);
INSERT INTO bill VALUES(2,"bill2",1);
INSERT INTO bill VALUES(2,"bill2",3);
SELECT * FROM bill;
// mysql 是不能優化掉的,執行計劃內有person
EXPLAIN SELECT bill.* FROM bill LEFT JOIN person ON FALSE AND bill.personId = person.id
同樣的測試,sqlserver可以優化掉。
即使select內有person的字段也可以。相見 執行計劃
SELECT bill.*,person.* FROM bill LEFT JOIN person ON 1=0 aND bill.personId = person.id