Hệ thống kiến thức Database này dành cho việc học backend, thực hành kỹ thuật và ôn tập phỏng vấn. Các bài viết về Database trên website được sắp xếp theo thứ tự “kiến thức cơ bản về Database -> SQL -> MySQL -> Redis -> NoSQL và công cụ tìm kiếm”.
Hệ thống kiến thức Database này dành cho việc học backend, thực hành kỹ thuật và ôn tập phỏng vấn. Các bài viết về Database trên website được sắp xếp theo thứ tự “kiến thức cơ bản về Database -> SQL -> MySQL -> Redis -> NoSQL và công cụ tìm kiếm”.
MySQL là một trong những relational database được dùng phổ biến nhất trong backend development, đồng thời là chuyên đề dễ bị hỏi sâu đến cùng trong các buổi phỏng vấn database. Khi học MySQL, nên tập trung vào các mạch chính: index làm truy vấn nhanh hơn như thế nào, transaction bảo đảm consistency ra sao, log bảo đảm recovery và replication thế nào, dữ liệu được đồng bộ tới các hệ thống không đồng nhất như search ra sao, execution plan xác định slow SQL như thế nào.
Địa chỉ bản gốc: https://shockerli.net/post/1000-line-mysql-note/ , JavaGuide đã biên tập lại bài viết và bổ sung mục lục.
Đây là một bản tổng hợp rất hay, đặc biệt khuyến nghị bạn lưu lại để xem khi cần.
Bài viết này do Mộc Mộc Tượng đóng góp.
Bài viết này sẽ phân tích quy trình thực thi một câu lệnh SQL trong MySQL, bao gồm cách truy vấn SQL lưu chuyển bên trong MySQL và cách hoàn tất việc cập nhật bằng câu lệnh SQL.
MySQL được sử dụng trong lần kiểm thử này là phiên bản
5.7.26. Một số tính năng có thể thay đổi theo các phiên bản MySQL mới hơn. Bài viết không đảm bảo các quan điểm và kết luận nêu trên đều chính xác với mọi phiên bản MySQL; hãy tự phân biệt khác biệt giữa các phiên bản.
MVCC là cơ chế concurrency control, dùng để duy trì consistency và isolation của dữ liệu khi nhiều transaction đồng thời đọc và ghi database. Cơ chế này được thực hiện bằng cách duy trì nhiều version của dữ liệu trên mỗi row. Khi một transaction sửa đổi dữ liệu, InnoDB sẽ trực tiếp cập nhật row hiện tại (cập nhật tại chỗ), đồng thời lưu version cũ vào Undo Log. Khi các transaction khác thực hiện snapshot read (Snapshot Read), chúng dựa trên ReadView và version chain trong Undo Log để đọc consistent view của dữ liệu tại một thời điểm, nhờ đó tránh việc thao tác đọc bị thao tác ghi chặn.
Tác giả: Phi Thiên Tiểu Ngưu Nhục
Bài viết gốc: https://mp.weixin.qq.com/s/qci10h9rJx_COZbHV3aygQ
Như ai cũng biết, khóa chính tự tăng có thể giúp clustered index được insert theo thứ tự tăng dần hết mức có thể, tránh truy vấn ngẫu nhiên, từ đó nâng cao hiệu suất query.
Sự cố database đáng sợ nhất trong production nhiều khi không phải là process MySQL bị crash.
Process bị crash còn có thể restart, primary database bị crash còn có thể chuyển sang replica. Điều thực sự rắc rối là dữ liệu bị xóa, bị script lỗi sửa nhầm, disk bị hỏng hoặc phát hiện thiếu một số table trong lúc migration. Khi đó, master-slave replication, redo log và undo log đều không đủ dùng; thứ thường có thể cứu vãn tình huống là backup và restore.
Tác giả: Tingfeng Địa chỉ bài gốc: https://www.cnblogs.com/huchong/p/10219318.html.
JavaGuide đã được tác giả cho phép sử dụng và đã hoàn thiện, bổ sung nội dung bài gốc.
Trong tối ưu performance database, index là một trong những biện pháp tối ưu trực tiếp và hiệu quả nhất. Tuy nhiên, tạo index không có nghĩa là chắc chắn index sẽ được sử dụng. Trong quá trình phát triển thực tế, chúng ta thường gặp tình huống khó hiểu: rõ ràng đã tạo index trên cột, nhưng truy vấn vẫn chậm như sên; phân tích bằng EXPLAIN mới phát hiện hóa ra lại là full table scan.