![](/img/trans.png)
[英]I want to apply an INNER JOIN and use WHERE condition using 3 tables
[英]inner join on condition or using where?
我有這個查詢
SELECT t1.col1
FROM table1 t1
INNER JOIN table2 t2 ON t2.col1 = t1.col1
WHERE t2.col IN (1, 2, 3)
和這個查詢
SELECT t1.col1
FROM table1 t1
INNER JOIN table2 t2 ON t2.col1 = t1.col1 AND t2.col IN (1, 2, 3)
都給我一個相同的執行計划,並告訴我
Using where;
這是否意味着我的第二個查詢已從優化器轉換為第一種形式,並且我應該遵循第一種形式?
有沒有辦法檢查優化器的新查詢?
SQL不是過程語言。 這是一種描述性語言。 查詢描述您要生成的結果集。
使用內部聯接,您的問題中的兩個查詢是相同的-它們在所有情況下都會產生相同的結果集。 首選哪個是風格偏好。 從優化的角度來看,MySQL應該以相同的方式對待兩者。
一種偏愛是單個表上的過濾器更適合WHERE
和ON
。
對於外部聯接,這兩個查詢是不相同的,您應該使用一個表達您的意圖的查詢。
連接兩個表后的第一個過濾器; 而第二個表使用值過濾作為連接兩個表的條件進行連接。 您可以檢查此線程:
您可以檢查執行兩個查詢需要花費多少,但是無論如何,您都可以用兩種方式編寫查詢,無論是第一個查詢還是第二個查詢,優化器都會嘗試優化查詢。
我喜歡這個規則:
ON ...
說明表之間的關系 。 WHERE ...
篩選結果。 這對於LEFT JOIN
來說很重要,因為ON
不能充當過濾器。
這表明您優化器對待它們的方式相同:
EXPLAIN EXTENDED SELECT ...
SHOW WARNINGS;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.