Created
June 9, 2021 03:51
-
-
Save dattp/cdf6043a993d0a9e9bb6b64d09c8cd49 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* bản chất join trong sql | |
* cơ chế join trong sql phụ thuộc vào thuật toán được sử dụng khi join. | |
* sử dụng câu lệnh `explain` để xem chi tiết khi join. | |
* có 3 thuật toán phổ biến khi join: `nested loop`, `hash`, `sort merge` | |
* `nested loop join`: | |
* thực hiện so sánh tất cả các rows trên 2 table. | |
* duyệt qua từng row của 1 table. | |
* với mỗi row duyệt qua từng row của table còn lại. | |
* với mỗi lần duyệt như vậy thì phép so sánh ở lệnh `ON` sẽ được sử dụng. | |
* => thuật toán đơn giản, nhưng phức tạp về thời gian thực thi. | |
* `hash join`: | |
* thực hiện hash các giá trị của FK và join dựa trên các giá trị được matching. | |
* hash FK của table có số lượng row ít hơn. | |
* lưu các giá trị hash đó vào 1 bảng hash dùng cho việc so sánh. | |
* scan table lớn hơn, thực hiện hash FK và so sánh vs hash trong bảng hash. | |
* Việc lấy từng hash của table lớn hơn rồi đi so sánh vs bảng hash cơ chế cũng giống như 2 vòng lặp như nested loop | |
nhưng hash chỉ có thời gian là o(1). | |
* `merge join`: | |
* thực hiện sắp xếp 2 table dựa trên FK và join. | |
* sau khi sắp xếp xong 2 table thì sẽ thực hiện như nested loop. | |
* sẽ dừng lại khi không tìm thấy các giá trị trùng nhau. | |
* Việc lựa chọn phương thức join nào là ở mức độ physical operator. Do đó, nó được lựa chọn do bộ optimize của sql. | |
Cơ bản `nested loop` là cái join được mong đợi nhất. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment