Coder Vui Tính

Coder Vui Tính Hướng dẫn lập trình, Nhận lập trình mọi thứ với mức giá hợp lý ^.^

Seri câu chuyện phỏng vấn, nơi mà mình chia sẻ kinh nghiệm đi phỏng vấn và những câu hỏi phỏng vấn mà mình gặp trong quá...
24/05/2024

Seri câu chuyện phỏng vấn, nơi mà mình chia sẻ kinh nghiệm đi phỏng vấn và những câu hỏi phỏng vấn mà mình gặp trong quá trình đi phỏng vấn xin việc lập trình Java

Đây là video quay lại quá trình học tập và nghiên cứu của chính bản thân mình, các bạn.Nếu thấy hữu ích hãy cho mình 1 like và 1 sub nếu có gì cần đính chính...

𝐓𝐚̣𝐢 𝐬𝐚𝐨 𝐤𝐡𝐢 𝐣𝐨𝐢𝐧 𝟏 𝐛𝐚̉𝐧𝐠 𝐯𝐨̛́𝐢 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐥𝐨̛́𝐧 𝐡𝐨̛𝐧 𝟏 𝐛𝐚̉𝐧𝐠 𝐯𝐨̛́𝐢 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐧𝐡𝐨̉ 𝐡𝐨̛𝐧 𝐦𝐚̀ 𝐣𝐨𝐢𝐧 𝐛𝐚̉𝐧𝐠 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐥𝐨...
23/05/2024

𝐓𝐚̣𝐢 𝐬𝐚𝐨 𝐤𝐡𝐢 𝐣𝐨𝐢𝐧 𝟏 𝐛𝐚̉𝐧𝐠 𝐯𝐨̛́𝐢 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐥𝐨̛́𝐧 𝐡𝐨̛𝐧 𝟏 𝐛𝐚̉𝐧𝐠 𝐯𝐨̛́𝐢 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐧𝐡𝐨̉ 𝐡𝐨̛𝐧 𝐦𝐚̀ 𝐣𝐨𝐢𝐧 𝐛𝐚̉𝐧𝐠 𝐝𝐮̛̃ 𝐥𝐢𝐞̣̂𝐮 𝐥𝐨̛́𝐧 𝐡𝐨̛𝐧 𝐭𝐫𝐮̛𝐨̛́𝐜 𝐭𝐡𝐢̀ 𝐜𝐚̂𝐮 𝐥𝐞̣̂𝐧𝐡 𝐭𝐫𝐮𝐲 𝐯𝐚̂́𝐧 𝐥𝐚̣𝐢 𝐧𝐡𝐚𝐧𝐡 𝐡𝐨̛𝐧

Khi thực hiện một truy vấn SQL với phép JOIN, việc sắp xếp thứ tự các bảng trong phép JOIN có thể ảnh hưởng đến hiệu suất của truy vấn. Đặc biệt, nếu bạn tham gia một bảng lớn với một bảng nhỏ, việc đặt bảng lớn trước trong phép JOIN có thể cải thiện hiệu suất truy vấn vì những lý do sau:

𝟏. 𝐓𝐡𝐮̛́ 𝐭𝐮̛̣ 𝐱𝐮̛̉ 𝐥𝐲́ 𝐯𝐚̀ 𝐭𝐨̂́𝐢 𝐮̛𝐮 𝐡𝐨́𝐚: Các hệ quản trị cơ sở dữ liệu (DBMS) thường sử dụng các thuật toán và chiến lược tối ưu hóa để thực hiện các phép JOIN. Một trong các chiến lược phổ biến là Nested Loop Join. Trong thuật toán này, bảng bên ngoài (outer table) được quét trước, và cho mỗi hàng trong bảng bên ngoài, hệ thống sẽ tìm kiếm các hàng tương ứng trong bảng bên trong (inner table). Nếu bảng lớn được quét trước, số lượng các phép tìm kiếm trong bảng nhỏ hơn sẽ ít hơn và nhanh hơn.

𝟐. 𝐒𝐮̛̉ 𝐝𝐮̣𝐧𝐠 𝐛𝐨̣̂ 𝐧𝐡𝐨̛́ 𝐡𝐢𝐞̣̂𝐮 𝐪𝐮𝐚̉ 𝐡𝐨̛𝐧: Khi bảng nhỏ được quét trước (được lưu trong bộ nhớ tạm thời), và bảng lớn hơn được quét sau, toàn bộ bảng nhỏ có thể được lưu trữ trong bộ nhớ để sử dụng cho mỗi lần quét của bảng lớn. Điều này giảm thiểu số lượng lần truy cập đến dữ liệu trên đĩa, cải thiện tốc độ truy vấn.

𝟑. 𝐏𝐚𝐫𝐭𝐢𝐭𝐢𝐨𝐧𝐬 𝐯𝐚̀ 𝐈𝐧𝐝𝐞𝐱𝐞𝐬: Khi bảng lớn được tham gia trước, cơ sở dữ liệu có thể sử dụng các chỉ số (indexes) và phân vùng (partitions) hiệu quả hơn để tìm kiếm các hàng tương ứng trong bảng nhỏ, giúp cải thiện hiệu suất truy vấn.

𝟒. 𝐂𝐚𝐜𝐡𝐢𝐧𝐠: Khi bảng lớn được quét trước, kết quả của bảng lớn có thể được lưu vào bộ nhớ cache, giúp các truy vấn kế tiếp trở nên nhanh hơn nếu có các phép JOIN khác sử dụng cùng bảng này.

𝟓. 𝐁𝐨̣̂ đ𝐞̣̂𝐦 đ𝐢̃𝐚 (𝐃𝐢𝐬𝐤 𝐈/𝐎): Khi xử lý bảng lớn trước, hệ thống có thể tối ưu hóa bộ đệm đĩa, giảm thiểu số lần đọc/ghi đĩa không cần thiết, từ đó tăng tốc độ truy vấn.

Ví dụ cụ thể:

Giả sử bạn có hai bảng, A và B, trong đó bảng A rất lớn và bảng B nhỏ. Nếu bạn viết truy vấn như sau:

SELECT *
FROM A
JOIN B ON A.id = B.id;

Hệ quản trị cơ sở dữ liệu sẽ quét qua tất cả các hàng của bảng A (bảng lớn) trước và sau đó tìm kiếm các hàng tương ứng trong bảng B (bảng nhỏ). Việc tìm kiếm trong bảng nhỏ hơn sẽ nhanh hơn do số lượng hàng cần tìm kiếm ít hơn và dữ liệu có thể nằm gọn trong bộ nhớ.

Trong trường hợp ngược lại, nếu bảng nhỏ được quét trước và mỗi hàng của nó được sử dụng để tìm kiếm trong bảng lớn, hệ quản trị cơ sở dữ liệu sẽ phải thực hiện nhiều phép tìm kiếm hơn trên bảng lớn, dẫn đến truy vấn chậm hơn.

Tuy nhiên, cần lưu ý rằng các hệ quản trị cơ sở dữ liệu hiện đại đều có các cơ chế tối ưu hóa phức tạp và có thể tự động chọn thứ tự JOIN tốt nhất. Việc tối ưu hóa thủ công thường chỉ cần thiết trong các trường hợp đặc biệt khi hệ thống không đưa ra được lựa chọn tối ưu nhất.

'𝔽𝕣𝕒𝕞𝕖𝕨𝕠𝕣𝕜𝕖𝕣' 𝕥𝕙𝕚̀ đ𝕦̛̀𝕟𝕘 𝕒̉𝕠 𝕥𝕦̛𝕠̛̉𝕟𝕘 𝕞𝕚̀𝕟𝕙 𝕝𝕒̀ '𝕊𝕠𝕗𝕥𝕨𝕒𝕣𝕖 𝔼𝕟𝕘𝕚𝕟𝕖𝕖𝕣' 🤦🏻‍♂️🤷🏻‍♂️Dạo này thấy nhiều bạn hùng hục code ứng ...
08/05/2024

'𝔽𝕣𝕒𝕞𝕖𝕨𝕠𝕣𝕜𝕖𝕣' 𝕥𝕙𝕚̀ đ𝕦̛̀𝕟𝕘 𝕒̉𝕠 𝕥𝕦̛𝕠̛̉𝕟𝕘 𝕞𝕚̀𝕟𝕙 𝕝𝕒̀ '𝕊𝕠𝕗𝕥𝕨𝕒𝕣𝕖 𝔼𝕟𝕘𝕚𝕟𝕖𝕖𝕣' 🤦🏻‍♂️🤷🏻‍♂️
Dạo này thấy nhiều bạn hùng hục code ứng dụng CRUD (Create - Read - Update - Delete) bé tý mà combo công nghệ trông màu mè cỡ 6-10 cái xếp hàng dài tăm tắp. Trừu tượng hóa thì oke đấy, nhưng đừng lạm dụng quá nhé mấy bro =)))))
Giờ đây, ta đang sống trong thời đại "bão táp" framework. Tailwind thì sõi, nhưng CSS gốc gác thì lại éo biết gì, Viết câu truy vấn SQL cơ bản thì loay hoay, ORM thì lại xài ngon ơ.
Ừ thì framework xịn xò, nhưng đừng quên nền tảng cơ bản! Nghĩ mình vippro chỉ vì mấy cái tutorial trên YouTube, nhưng thiết kế database là gì, hệ thống vận hành ra sao thì lại hoàn toàn mù mờ. Chưa hiểu JavaScript hoạt động cơ bản mà đã nhăm nhăm học Next.js, rồi rẽ rúng tay xin xỏ các anh chị "có kinh nghiệm".
Nghe hơi mất lòng tý nhưng sự thật là: Bạn ơi, bạn giỏi "frameworker" thôi, chứ để gọi là "Software Engineer" thì thôi đi nhé =)))
Software Engineer là người thấu hiểu "chân lý" lập trình, nắm chắc nền tảng để biến phức tạp thành đơn giản. Họ luôn tò mò, muốn khám phá đằng sau những dòng code.
Code cũng không chỉ là viết code! Quan trọng là hiểu toàn bộ hệ thống. Tin tôi đi, nó không khó đâu, mà ngược lại - siêu đơn giản!
Nắm chắc gốc rễ, học framework hay bất cứ thứ gì khác chỉ là chuyện "vài giờ, vài ngày" thôi. Nên nhớ, xây nhà cao tầng thì móng phải vững chắc trước. Vậy nhé 🤩


bài viết này được lấy từ group: Genz lập trình của bạn Minh Duc Tran Le

🥰🥰🥰Example về Theard trong Java. 🥰🥰🥰Mong video này sẽ giúp ích cho ai cần tìm hiểu thêm về Thread🤗.Mình sẽ cố gắng ra nh...
29/04/2024

🥰🥰🥰Example về Theard trong Java. 🥰🥰🥰

Mong video này sẽ giúp ích cho ai cần tìm hiểu thêm về Thread🤗.

Mình sẽ cố gắng ra nhiều video hơn trong thời gian sắp tới😎. Các bạn hãy ủng hộ nhé

Đây là video quay lại quá trình học tập và nghiên cứu của chính bản thân mình, các bạn.Nếu thấy hữu ích hãy cho mình 1 like và 1 sub nếu có gì cần đính chính...

Address

Hanoi
Ha D**g
00084

Alerts

Be the first to know and let us send you an email when Coder Vui Tính posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Contact The Business

Send a message to Coder Vui Tính:

Share