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

Concatenated Indexes

0 0 3

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

Theo Viblo Asia

1. Mở đầu

Trước khi bước vào con đường "tu luyện" với các chỉ mục kết hợp, hãy đảm bảo bạn có bí kíp trong tay. Cũng giống như chọn vũ khí cho một trận chiến, chỉ mục đúng sẽ giúp bạn tăng hiệu suất truy vấn, còn chỉ mục sai... thì chúng có thể đang tự tay bóp ... mình!

2. Phân tích

Khi một index có nhiều cột được đánh chỉ mục, nó được gọi là chỉ mục kết hợp hoặc chỉ mục phức hợp. Mặc dù việc Oracle giới thiệu truy cập chỉ mục skip-scan đã giúp cho trình tối ưu hóa sẽ có nhiều tùy chọn hơn khi sử dụng chỉ mục kết hợp, chúng ta nên chú ý chọn thứ tự các cột trong chỉ mục. Thông thường, cột đầu tiên trong chỉ mục nên là cột có khả năng xuất hiện nhiều nhất trong các câu lệnh WHERE và cũng là cột có tính chọn lọc cao nhất trong nhóm.

Trước khi chức năng skip-scan được giới thiệu, các truy vấn chỉ có thể sử dụng index nếu cột đầu tiên của chỉ mục xuất hiện trong câu lệnh WHERE. Xem xét ví dụ sau với bảng EMP có một chỉ mục kết hợp (ba phần) trên các cột EMPNO, ENAME và DEPTNO. Lưu ý rằng EMPNO là phần đầu tiên, ENAME là phần thứ hai, và DEPTNO là phần thứ ba. Nếu chúng không sử dụng chức năng skip-scan, Oracle thường sẽ không sử dụng chỉ mục này trừ khi câu lệnh WHERE của chúng ta chỉ định một giá trị cho cột đầu tiên (EMPNO).

Vì ENAME không phải là cột đầu tiên của chỉ mục, trình tối ưu hóa có thể quyết định không sử dụng chỉ mục. Với chức năng skip-scan, trình tối ưu hóa có thể chọn sử dụng chỉ mục ngay cả khi không có giá trị EMPNO được chỉ định trong câu lệnh WHERE. Thay vào đó, trình tối ưu hóa có thể thực hiện fast full scan index hoặc quét toàn bộ bảng.

Điều tương tự cũng đúng nếu cột thứ ba của chỉ mục được sử dụng trong câu lệnh WHERE:

Trong danh sách này, câu lệnh WHERE chỉ định một giá trị cho cột thứ ba trong chỉ mục. Trình tối ưu hóa có thể chọn thực hiện truy cập chỉ mục skip-scan, fast full scan index, hoặc quét toàn bộ bảng. Bằng cách tạo chỉ mục, chúng ta đã cung cấp cho cơ sở dữ liệu nhiều lựa chọn hơn khi thực hiện truy vấn, hy vọng sẽ cải thiện hiệu suất tổng thể. Lưu ý rằng code của người dùng không thay đổi; trình tối ưu hóa nhận thức về chỉ mục và đưa ra quyết định dựa trên chi phí dự đoán của từng lựa chọn.

Trong ví dụ dưới đây, một phần của index được sử dụng. Cột đầu tiên, EMPNO, được dùng làm điều kiện giới hạn trong câu lệnh WHERE để Oracle có thể sử dụng phần đầu của index (nếu phần thứ hai, ENAME, cũng có trong câu WHERE cùng với EMPNO, thì nó sẽ sử dụng hai phần; nếu cả ba phần đều có, thì toàn bộ index sẽ được sử dụng—giải pháp tối ưu và giới hạn nhất). Trong ví dụ này, ta chỉ sử dụng phần đầu tiên của index với điều kiện trên EMPNO:

Có hai loại quét index phổ biến nhất là index unique scan và index range scan. Trong index unique scan, cơ sở dữ liệu biết rằng index chứa danh sách các giá trị duy nhất. Trong index range scan, cơ sở dữ liệu trả về nhiều giá trị từ index dựa trên tiêu chí truy vấn. Để tạo một unique index, sử dụng lệnh CREATE UNIQUE INDEX khi tạo index.

Khi chúng ta tạo khóa chính hoặc ràng buộc UNIQUE, Oracle tự động tạo một unique index dựa trên các cột chúng ta chỉ định (trừ khi ràng buộc được tạo với mệnh đề DISABLE). Nếu chúng ta tạo khóa chính nhiều cột, Oracle tạo một concatenated index với các cột theo cùng thứ tự mà chúng ta đã chỉ định khi tạo khóa chính.

TIP

Tránh việc hard-code ROWID của Oracle vào code cụ thể. Cấu trúc ROWID trong quá khứ đã thay đổi từ phiên bản này sang phiên bản khác và có khả năng sẽ thay đổi nữa trong các phiên bản tương lai. Mình khuyên anh em không nên hard-code ROWID.

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

Disable và Enable trigger trong Oracle

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

0 0 41

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

BPM Tutorial: Cách tích hợp Database trên nền tảng IBM BPM

Bài viết này hướng dẫn các bạn các thiết lập connection từ Database sẵn có với IBM BPM. Hiện nay IBM BPM hỗ trợ 3 loại DB là IBM Db2, Oracle, và Microsoft SQL Server DB.

0 0 52

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

HOW TO FIND DUPLICATE VALUES IN SQL

Bài viết này xuất phát từ bài toán mà mình gặp rất nhiều trong quá trình test data. Bạn cần visualize lên các dashboard hay đơn giản cần export raw data để lấy dữ liệu chính xác.

0 0 45

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

DATES FUNCTIONS IN SQL

Trong quá trình làm việc với data bạn sẽ cần dùng rất nhiều đến Date Functions. Bạn muốn tính con số Today, This weeks, This Month, Last month, MTD, YTD,.

0 0 54

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

1 triệu bản ghi VARCHAR2(400) và VARCHAR2(2) có hiệu năng khác biệt ra sao - Thay đổi thứ tự các bảng khi JOIN có ảnh hưởng hiệu năng không?

Tại bài này, tôi sẽ giúp các bạn giải quyết "một lần và mãi mãi" những hiểu lầm kinh điển sau. .

0 0 48

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

Thiết kế sai lầm trong Cơ sở dữ liệu và giải pháp cải thiện hơn 700% hiệu năng

Đây là những bài viết về các dự án & kinh nghiệm tối ưu cơ sở dữ liệu của tôi tại Wecommit. Những giá trị mà bạn sẽ nhận được.

0 0 24