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

Mục đích sử dụng nhiều loại index trên cùng một cột

0 0 5

Người đăng: Nguyễn Trung Nam

Theo Viblo Asia

1. Mở đầu

Việc áp dụng nhiều loại index trên cùng một cột có thể giúp tối ưu hóa hiệu suất cho các loại tác vụ khác nhau. Dù nghe có vẻ không quen, nhưng việc kết hợp các loại index như B-tree, bitmap, hay reverse key trên cùng một cột có thể mang lại lợi ích lớn cho việc xử lý dữ liệu, từ các truy vấn tìm kiếm nhanh chóng đến các phân tích dữ liệu phức tạp.

2. Phân tích

Có thể có nhiều loại index khác nhau trên cùng một (nhiều) cột, nhưng chỉ một index có thể được đặt ở trạng thái visible tại cùng một thời điểm, trừ khi index kia là function-based index (vì một function-based index không thực sự nằm trên cùng cột; nó dựa trên hàm của cột đó).

Tính năng này rất hữu ích cho các khối lượng công việc thay đổi trên cùng một bảng. Việc sử dụng các loại index khác nhau cho các tác vụ batch, truy vấn, hoặc data warehouse vào các thời điểm khác nhau trong ngày hoặc đêm rất hiệu quả. Tuy nhiên, có một số hạn chế: Đối với một (nhiều) cột nhất định, chúng ta không thể tạo cả B-tree và B-tree cluster index. Chúng ta cũng không thể tạo cả B-tree index và index-organized table (IOT). Tất cả các index đều được duy trì trong quá trình thực hiện các thao tác DML (ngay cả khi được đặt ở trạng thái invisible). Hãy lưu ý rằng, các thao tác DML có thể chạy chậm nếu có quá nhiều index được tạo.

Dưới đây là một câu lệnh SELECT cơ bản từ bảng DEPT mà chúng ta sẽ sử dụng cho các ví dụ trong phần này:

Đầu tiên, tạo một unique index, không cho phép insert các giá trị trùng lặp:

Ngay cả khi các index được đặt ở trạng thái invisible, các giá trị trùng lặp vẫn không thể được insert vào:

Ví dụ sau kiểm tra xem các index có được đặt ở trạng thái invisible hay không, để thực hiện visible lại index.

Chúng ta không thể tạo một index khác trên cùng một cột:

Tuy nhiên, chúng ta có thể nếu làm cho index đầu tiên invisible đi, sau đó tạo index thứ hai:

Bây giờ, nếu kiểm tra thông tin VISIBILITY của index, chúng ta sẽ thấy hai index trên cùng một cột:

Nếu chúng ta cố gắng làm cho cả hai index visible, sẽ dẫn đến lỗi như hình bên dưới. Chỉ một index có thể visible tại một thời điểm (trừ các function-based index).

Lưu ý rằng, mặc dù có một unique index (đang ẩn), chỉ có visible index mới được sử dụng:

Để thêm một index thứ ba, chúng ta phải làm cho hai index đầu tiên invisible đi:

Có thể tạo hai index visible trên một cột cùng lúc, nếu một trong số đó là function-based index. Hãy làm cho index thứ ba invisible đi và thêm index thứ tư (và thứ năm):

Bây giờ khi kiểm tra thông tin VISIBILITY của các index, chúng ta sẽ thấy rằng có năm index trên cùng một cột, với hai index (một trong số đó là function-based index) đang visible:

TIP

Bằng cách sử dụng các invisible index, chúng ta có thể tạo nhiều index trên cùng một cột hoặc nhiều cột. Điều này có thể hữu ích với các khối lượng công việc thay đổi. Ví dụ, chúng có thể sử dụng một B-tree index cho khối lượng công việc hàng ngày và sử dụng reverse key index vào các job ban đêm. Tuy nhiên, hãy lưu ý rằng có sự bảo trì nội bộ của index và các chi phí cho các thao tác INSERT, DELETE và khi cập nhật cột đã được index trên tất cả các index này.

3. Thông tin kết nối

Nếu anh em muốn trao đổi thêm về bài viết, hãy kết nối với mình qua LinkedIn và Facebook:

Rất mong được kết nối và cùng thảo luận!

Bình luận

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

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

Mysql index strategy

Trong Mysql, index hỗ trợ việc tìm kiếm các rows theo từng giá trị của các columns trong bảng trở nên nhanh chóng. Việc tìm kiếm sẽ phải scan toàn bộ table nếu các column trong câu query không được đánh index một cách thích hợp. . .

0 0 65

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

Mẹo SEO Cơ Bản Giúp Website Của Bạn Được Lập Chỉ Mục Nhanh Hơn

Hướng dẫn 10 mẹo cơ bản giúp các bạn SEOer mới dễ dàng hơn trong việc lập chỉ mục nội dung của website mới. Khi bạn cập nhật những bài viết mới trong khoảng thời gian đầu tiền của trang web sẽ rất mất

0 0 50

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

MySQL Performance Tuning With Index

Lâu rồi không viết bài trên viblo nên để cái tiêu đề hơi công nghiệp =)) Xin chào các bạn, đợt rồi mình mới được làm vài task cải thiện thiện tốc độ truy vấn mysql nên hôm nay xin phép chia sẻ lại chú

0 0 86

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

Tăng tốc database phần 1 index - khái niệm cơ bản

Phần đầu tiên trong chuỗi bài là các phần liên quan tới database, nhiều bạn thích trình bày các vấn đề khác về database tuy nhiên theo kinh nghiệm cá nhân mình thấy hiểu về index trong db rất quan trọ

0 0 42

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

Tăng tốc database index phần 2 - Leaf Nodes

Đầu tiên mình định dịch ra là nút lá, nhưng nghe nó không được hay cho lắm nên quyết định giữ nguyên tên của nó là Leaf Nodes. Giải pháp để khắc phục vấn đề này là mấy ông làm ra cơ sở dữ liệu sẽ khôn

0 0 35

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

Tăng tốc database index phần 3 - B-Tree

Index leaf node được lưu trữ theo dạng Linked List về mặt logic, còn về cấu trúc lưu trữ vật lý, mỗi leaf node có thể lưu lung tung, không có thứ tự gì, nó giống một quyền từ điển mà các trang bị xáo

0 0 44