MySQL是一種關系型數據庫管理系統,底層實現了多種關聯算法。在數據庫中,關系型數據是通過關系來描述的,而關系型數據之間的聯系則需要使用關聯算法來實現。
MySQL底層常用的關聯算法有兩種,一種是 Nested Loop Join(嵌套循環連接),另一種是 Hash Join(哈希連接)。
// Nested Loop Join 實現 SELECT * FROM table1, table2 WHERE table1.column1 = table2.column2; // Hash Join 實現 SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column2;
Nested Loop Join采用的是嵌套循環的方式,它的時間復雜度為 O(n^2)。在執行時,MySQL首先會選擇其中一張表作為驅動表,另一張表作為被驅動表。然后,MySQL會遍歷驅動表中的每一個行,在被驅動表中查找滿足條件的行,最后將符合條件的行組合成結果集。
Hash Join采用的是哈希表的方式,在構建哈希表的過程中,MySQL需要將表中的數據全部讀取到內存中,并對其中某一列進行哈希計算。在計算出哈希值后,MySQL將數據保存到哈希表中,同時在另一張表中查找哈希表中的值。
// 使用 EXPLAIN 關鍵字可以查看底層的關聯算法 EXPLAIN SELECT * FROM table1, table2 WHERE table1.column1 = table2.column2;
總的來說,Nested Loop Join適用于小數據表之間的連接查詢,而Hash Join適用于大數據表之間的連接查詢。
下一篇mysql 性能報告