mysql顯式和隱式效率 顯式與隱式SQL連線

2021-10-22 09:09:29 字數 1398 閱讀 1095

顯式和隱式內部聯接是否存在效率差異? 例如:

select * from

table a inner join table b

on a.id = b.id;

與select a.*, b.*

from table a, table b

where a.id = b.id;

#1樓在mysql 5.1.51上,兩個查詢的執行計畫相同:

mysql> explain select * from table1 a inner join table2 b on a.pid = b.pid;

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |

| 1 | ****** | b | all | primary | null | null | null | 986 | |

| 1 | ****** | a | ref | pid | pid | 4 | schema.b.pid | 70 | |

2 rows in set (0.02 sec)

mysql> explain select * from table1 a, table2 b where a.pid = b.pid;

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |

| 1 | ****** | b | all | primary | null | null | null | 986 | |

| 1 | ****** | a | ref | pid | pid | 4 | schema.b.pid | 70 | |

2 rows in set (0.00 sec)

table1具有166208行; table2大約有1000行。

這是乙個非常簡單的情況; 它絕不證明查詢優化器不會在更複雜的情況下產生混亂並生成不同的計畫。

#2樓第二種語法具有交叉聯接的可能性:您可以將表新增到from部分,而無需相應的where子句。 這被認為是有害的。

#3樓以我的經驗,使用子句中的交叉聯接常常會導致大腦受損的執行計畫,尤其是在使用microsoft sql產品的情況下。 例如,sql server嘗試估算錶行數的方法非常可怕。 使用內部聯接語法使您可以控制查詢的執行方式。 因此,從實際的角度來看,鑑於當前資料庫技術的簡單性,您必須使用內部聯接。

#4樓在效能方面,它們是完全相同的(至少在sql server中)。

ps:請注意,自sql server 2005起不建議使用implicit outer join語法。(仍支援問題中使用的implicit inner join語法)

#5樓

mysql 隱式和顯式鎖定

innodb採用兩階段鎖定協議,在事務執行過程中,隨時都可以執行鎖定,鎖只有在執行commit或rollback的時候才會釋放,並且所有的鎖是在同一時刻被釋放的,前面所述的鎖定是隱式鎖定,innodb會根據事務的隔離級別在需要的時候自動加鎖。select lock in share mode sel...

顯式Intent和隱式Intent

size medium size medium 2011 09 12 09 35 顯式intent和隱式intent區別 android當中顯式intent和隱式intent的區別 定義 intent定義 intent是一種在不同元件之間傳遞的請求訊息,是應用程式發出的請求和意圖。作為乙個完整的訊息...

顯式等待 隱式等待

現在的網頁越來越多採用了 ajax 技術,這樣程式便不能確定何時某個元素完全載入出來了。如果實際頁面等待時間過長導致某個dom元素還沒出來,但是你的 直接使用了這個webelement,那麼就會丟擲nullpointer的異常。為了避免這種元素定位困難而且會提高產生 elementnotvisibl...