我有一個查詢,其中我使用13左外部連接。左表有一個大數據,所以它需要非常多的時間來執行查詢並返回結果。 但是,當我使用where子句過濾結果時,它花費的時間非常少。 現在我很疑惑哪一個首先執行:產生結果的連接,然後是where子句從它過濾或首先它過濾結果的連接結果。其中運行第一:聯接或where子句
10
A
回答
10
一般來說,任何DBMS(如SQL)都會執行自己的查詢優化,它使用它認爲最快的算法。所以它是過濾,然後加入。
2
閱讀:which one runs first in query execution WHERE CLAUSE orJOIN CLAUSE ?
和
我雷丁皮納爾戴夫後,我發現這一點,migh talso幫助你瞭解
瞭解ON子句它在JOIN之前應用,這就是爲什麼它檢索Table2的所有結果,其中Flag = 1但它不影響Table1,因此它檢索table1的所有行。當應用WHERE子句時,它適用於完整結果,因此它將從Table1和Table2中刪除Flag不等於1的所有行,從而使Table1和Table2中的標誌= 1行基本保持不變。
2
Copied from my previous answer
create table A(id int);
create table B(id int);
INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);
INSERT INTO B VALUES(1);
INSERT INTO B VALUES(2);
INSERT INTO B VALUES(3);
SELECT * FROM A;
SELECT * FROM B;
id
-----------
1
2
3
id
-----------
1
2
3
濾波器對JOIN,以防止在連接過程被添加行。
select a.*,b.*
from A a left join B b
on a.id =b.id and a.id=2;
id id
----------- -----------
1 NULL
2 2
3 NULL
在JOIN發生後將會過濾WHERE。
select a.*,b.*
from A a left join B b
on a.id =b.id
where a.id=2;
id id
----------- -----------
2 2
相關問題
- 1. 返回從WHERE子句或第一個
- 2. 雄辯第一where子句
- 3. 如何執行聯接或在關係或預取中放置where子句? (LLBLGen)
- 4. 交叉聯接與Where子句
- 5. 自然聯接Vs的WHERE子句
- 6. MySQL的內部聯接與WHERE子句
- 7. 運行WHERE子句後只顯示每第2行
- 8. 內部聯接或WHERE子句中的AND語句之間的區別
- 9. 其中EF6在SQL或客戶端執行where子句
- 10. SQL WHERE子句級聯
- 11. 其中內子句聯接查詢
- 12. 或者在where子句中使用嵌套時包含或與連接關聯
- 13. MYSQL如何取消或無效WHERE子句中的WHERE子句
- 14. 如果value ='x',Mysql運行where子句?
- 15. Sequelize:或父母where子句和孩子where子句
- 16. Linq Lambda Where子句在where子句中
- 17. 執行where子句
- 18. Where子句與內部聯接語句檢查是否相同?
- 19. 凡在where子句中 - 第2版:-)
- 20. LAMBDA使用或WHERE子句
- 21. 或操作在WHERE子句
- 22. where子句中的MySQL「其中3」
- 23. WHERE子句中
- 24. SQL Server 2012中的where子句的內部聯接
- 25. PostgreSQL的 - 條件在where子句中使用聯接
- 26. 左連接和Where子句
- 27. 左連接與where子句
- 28. Oracle where子句外連接
- 29. MySQL連接表WHERE子句
- 30. MySQL與WHERE子句連接
請記住,無論SQL Server的查詢優化程序如何選擇隨機播放,最好的方法是正確維護和索引數據,以便服務器更輕鬆地完成工作。 –
維護得好'STATISTICS'也有幫助。 – MarkD
不要忘記upvote並將其標記爲已接受,如果您獲得的信息是wnat –