Skip to content

Instantly share code, notes, and snippets.

@dattp
Created June 9, 2021 03:51
Show Gist options
  • Save dattp/cdf6043a993d0a9e9bb6b64d09c8cd49 to your computer and use it in GitHub Desktop.
Save dattp/cdf6043a993d0a9e9bb6b64d09c8cd49 to your computer and use it in GitHub Desktop.
* 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