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

Fast Full Scans vs Skip Scans Trong Oracle Database

0 0 5

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

Theo Viblo Asia

1. Mở đầu

Tốc độ truy xuất thông tin là chìa khóa thành công trong thế giới cơ sở dữ liệu. Trong cuộc chiến tối ưu hóa truy vấn, hai chiến thuật nổi bật là Fast Full Scans và Skip Scans. Mỗi phương pháp đều có ưu điểm riêng, giúp cải thiện hiệu suất truy vấn theo cách độc đáo của mình. Hãy cùng khám phá cách mà hai chiến thuật này hoạt động và làm thế nào chúng có thể giúp chúng tối ưu hóa trải nghiệm truy xuất dữ liệu.

2. Fast Full Scans

Trong quá trình fast full scan, Oracle sẽ đọc tất cả các leaf block trong một b-tree index. Việc đọc chỉ mục diễn ra theo thứ tự, do đó nhiều block có thể được đọc cùng một lúc. Tham số DB_FILE_MULTIBLOCK_READ_COUNT trong tệp khởi tạo sẽ kiểm soát số lượng block có thể được đọc đồng thời. Fast full scan thường yêu cầu ít thao tác I/O vật lý hơn so với quét toàn bộ bảng (full table scan), giúp truy vấn được thực thi nhanh hơn.

Fast full scan có thể được sử dụng nếu tất cả các cột trong truy vấn cho bảng đều nằm trong chỉ mục và phần đầu tiên của chỉ mục không phải là một phần của điều kiện WHERE (chúng ta có thể cần chỉ định INDEX_FFS hint). Trong ví dụ sau, bảng EMP được sử dụng, bảng có một chỉ mục kết hợp trên các cột EMPNO, ENAMEDEPTNO.

Vì tất cả các cột trong câu lệnh SQL đều nằm trong chỉ mục, nên có thể áp dụng phương pháp quét nhanh toàn bộ chỉ mục (fast full scan). Các thao tác index fast full scan thường được sử dụng trong các phép nối, khi chỉ có các cột khóa nối đã được đánh chỉ mục được truy vấn. Ngoài ra, Oracle cũng có thể chọn phương thức truy cập theo kiểu skip-scan; trình tối ưu hóa (optimizer) sẽ xem xét histogram cho cột DEPTNO (nếu có) và xác định con đường truy cập mang lại hiệu suất tối ưu với chi phí thấp nhất.

TIP

Nếu các chỉ mục nhỏ hơn tương đối so với kích thước tổng của bảng, quét nhanh toàn bộ chỉ mục có thể mang lại sự cải thiện hiệu suất cần thiết cho ứng dụng. Tuy nhiên, với các chỉ mục kết hợp chứa phần lớn các cột của bảng, chỉ mục có thể lớn hơn bản thân bảng và việc quét nhanh toàn bộ chỉ mục có thể làm giảm hiệu suất.

3. Skip-Scans

Như đã thảo luận trong bài viết “Concatenated Indexes”, tính năng index skip-scan cho phép bộ tối ưu hóa sử dụng một chỉ mục kết hợp ngay cả khi leading column không được liệt kê trong mệnh đề WHERE. Các thao tác index skip-scan nhanh hơn so với việc quét toàn bộ chỉ mục, yêu cầu ít lượt đọc hơn. Ví dụ, các truy vấn sau đây cho thấy sự khác biệt giữa việc quét toàn bộ chỉ mục và skip-scan.

Như được hiển thị trong danh sách, tùy chọn thứ hai đã sử dụng thao tác INDEX_SS (SKIP SCAN) để đọc chỉ mục. Chiến lược thực thi này yêu cầu 21 lần logical reads và 17 physical reads. Tùy chọn đầu tiên thực hiện thao tác INDEX (FAST FULL SCAN), yêu cầu số lượng logical reads (consistent gets) và physical reads lớn hơn đáng kể.

Chú thích

Logical Reads (Consistent Gets):

Logical reads đại diện cho số lần dữ liệu đã được truy xuất từ bộ nhớ (cache) của Oracle. Khi một truy vấn yêu cầu dữ liệu, Oracle sẽ kiểm tra bộ nhớ để xem liệu dữ liệu đó đã có sẵn hay chưa. Nếu có, đó được coi là một logical read. Việc này không yêu cầu truy cập vào đĩa cứng, vì dữ liệu đã được lưu trữ trong bộ nhớ.

Physical Reads:

Physical reads xảy ra khi Oracle không tìm thấy dữ liệu trong bộ nhớ và phải truy cập vào đĩa cứng để đọc dữ liệu. Điều này thường xảy ra khi dữ liệu chưa được lưu trữ trong bộ nhớ cache hoặc khi cache đã bị thay thế bởi các dữ liệu khác. Physical reads thường tốn thời gian hơn so với logical reads, vì việc truy cập vào đĩa cứng chậm hơn nhiều so với việc truy cập vào bộ nhớ.

Để khiến trình tối ưu hóa chọn skip-scan, chúng có thể cần sử dụng hint trong truy vấn như ví dụ trên. Hint này sẽ ảnh hưởng đến trình tối ưu hóa, thiên về chiến lược thực thi mà chúng ta chỉ định.

TIP

Đối với các bảng lớn có chỉ mục kết hợp, tính năng index skip-scan có thể cung cấp truy cập nhanh ngay cả khi cột đầu tiên của chỉ mục không được sử dụng trong điều kiện giới hạn.

4. 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 51

- 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