SERIES INDEX NÂNG CAO - BÀI 3: HIỂU VỀ CLUSTERED INDEX VÀ SECONDARY INDEX TRONG MYSQL (INNODB ENGINE)

0 0 0

Người đăng: Tờ Mờ Sáng học Lập trình

Theo Viblo Asia

Đọc full series Index nâng cao: Kiến trúc và Tối ưu hóa Index trong MySQL dành cho Developer và DBA

Trong hệ quản trị cơ sở dữ liệu MySQL, đặc biệt với bộ lưu trữ InnoDB, việc hiểu cách hoạt động của Clustered IndexSecondary Index là rất quan trọng để tối ưu hiệu suất truy vấn.

Vậy Clustered Index là gì?

Clustered Index là một index đặc biệt mà InnoDB sử dụng để lưu trữ row data. Thông thường, Clustered Index chính là PRIMARY KEY của bảng.

  • Khi bạn định nghĩa một PRIMARY KEY, InnoDB sẽ dùng nó làm Clustered Index.
  • Nếu không có PRIMARY KEY, InnoDB sẽ chọn UNIQUE index đầu tiên có các cột được khai báo là NOT NULL để làm Clustered Index.
  • Nếu không có PRIMARY KEY hoặc UNIQUE index phù hợp, InnoDB sẽ tạo ra một hidden clustered index có tên GEN_CLUST_INDEX, dựa trên một cột tổng hợp chứa row ID — một giá trị dài 6 bytes tăng dần mỗi khi thêm bản ghi mới. Hiểu đơn giản thì các rows sẽ được sắp xếp theo thứ tự row ID, mà thứ tự này sẽ tương ứng với thứ tự insert trước sau của từng row.

👉 LƯU Ý: Để hiệu suất tốt nhất, chúng ta nên luôn định nghĩa PRIMARY KEY cho mỗi bảng. Nếu không có cột nào phù hợp, hãy sử dụng một cột AUTO_INCREMENT.

Ví dụ:

CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), age INT
) ENGINE=InnoDB;

👉 Ở đây:

  • idPRIMARY KEY => trở thành Clustered Index.

Lợi ích của Clustered Index

Việc truy cập dữ liệu thông qua Clustered Index rất nhanh, vì quá trình tìm kiếm index sẽ dẫn trực tiếp đến page chứa row data.

Đối với các bảng lớn, điều này thường giúp tiết kiệm thao tác disk I/O so với cách lưu trữ mà row data nằm ở một page khác với index record.

Secondary Index hoạt động như thế nào? Nó liên quan gì đến Clustered Index?

Trong MySQL documentation có đoạn mô tả:

Indexes other than the clustered index are known as secondary indexes. In InnoDB, each record in a secondary index contains the primary key columns for the row, as well as the columns specified for the secondary index. InnoDB uses this primary key value to search for the row in the clustered index.

Tức là, các index không phải Clustered Index thì được gọi là Secondary Index.

Mỗi bản ghi trong một Secondary Index của InnoDB sẽ chứa giá trị của PRIMARY KEY, cùng với các cột được chỉ định trong Secondary Index đó.

Vì lý do này, khi bạn tìm kiếm bằng Secondary Index, InnoDB sẽ:

  1. Dùng Secondary Index để tìm giá trị PRIMARY KEY của bản ghi tương ứng.
  2. Dùng PRIMARY KEY để truy cập dữ liệu thực tế thông qua Clustered Index.

secondary index

⛔ Nếu PRIMARY KEY dài, mọi bản ghi trong Secondary Index cũng sẽ phình to hơn, vì phải chứa thêm dữ liệu của PRIMARY KEY. Do đó, nên chọn PRIMARY KEY ngắn gọn để tiết kiệm bộ nhớ và cải thiện hiệu suất.

Ví dụ:

CREATE TABLE users ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), age INT
) ENGINE=InnoDB; CREATE INDEX idx_name ON users (last_name, first_name);

👉 Ở đây:

  • idPRIMARY KEY => Clustered Index.
  • idx_nameSecondary Index.

Kiểm chứng bằng câu lệnh:

SHOW INDEX FROM users;

👉 Kết quả:

Show index


🙋🏻‍♂️ Một số kênh mạng xã hội khác mà tôi dùng để chia sẻ và trao đổi với anh em kiến thức về ngành CNTT và lập trình:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mô hình quan hệ - thực thể (Entity – Relationship Model)

Mô hình quan hệ thực thể (Entity Relationship model - E-R) được CHEN giới thiệu vào năm 1976 là một mô hình được sử dụng rộng rãi trong các bản thiết kế cơ sở dữ liệu ở mức khái niệm, được xây dựng dựa trên việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối

0 0 139

- vừa được xem lúc

[Embulk #1] Công cụ giúp giảm nỗi đau chuyển đổi dữ liệu

Embulk là gì. Embulk là một công cụ open source có chức năng cơ bản là load các record từ database này và import sang database khác.

0 0 69

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 118

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 989

- vừa được xem lúc

Disable và Enable trigger trong Oracle

Origin post: https://www.tranthanhdeveloper.com/2020/12/disable-va-enable-trigger-trong-oracle.html.

0 0 51

- vừa được xem lúc

Lưu trữ dữ liệu với Data Store

. Data Store là một trong những componet của bộ thư viện Android JetPack, nó là một sự lựa chọn hoàn hảo để thay thế cho SharedPreferences để lưu trữ dữ liệu đơn giản dưới dạng key-value. Chúng ta cùng làm một so sánh nhỏ để thấy sự tối ưu của Data Store với SharedPreferences nhé.

0 0 78