1. Giới thiệu
Tốc độ truy xuất thông tin là yếu tố then chốt cho sự thành công trong môi trường cơ sở dữ liệu hiện đại. Trong việc tối ưu hóa truy vấn, hai chiến lược quan trọng mà các nhà quản trị cơ sở dữ liệu (DBA) thường sử dụng là Fast Full Scans và Skip Scans. Mỗi phương pháp đều có những điểm mạnh riêng, giúp cải thiện hiệu suất truy vấn theo cách độc đáo. Bài viết này sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động của cả hai chiến thuật và làm thế nào chúng tối ưu hóa trải nghiệm truy xuất dữ liệu.
2. Chiến lược Fast Full Scans
Fast Full Scan là phương pháp mà Oracle sử dụng để đọc toàn bộ các leaf block trong một b-tree index. Quá trình này diễn ra theo thứ tự, cho phép nhiều block được đọc cùng một lúc. Tham số DB_FILE_MULTIBLOCK_READ_COUNT trong tệp khởi tạo quyết định số lượng block có thể được đọc đồng thời. Fast Full Scan thường cần ít thao tác I/O vật lý hơn so với việc thực hiện Full Table Scan, giúp tăng tốc độ truy vấn.
Điều kiện để sử dụng phương pháp Fast Full Scan là tất cả các cột trong truy vấn đều phải nằm trong chỉ mục và phần đầu tiên của chỉ mục không nằm trong điều kiện WHERE. Thông thường, cần chỉ định INDEX_FFS hint để áp dụng phương pháp này. Ví dụ, giả sử có bảng EMP với chỉ mục kết hợp trên các cột EMPNO, ENAME và DEPTNO. Nếu tất cả các cột trong câu lệnh SQL đều nằm trong chỉ mục, việc quét nhanh toàn bộ chỉ mục có thể được thực hiện.
Fast Full Scan thường được ứng dụng trong các phép nối (join), trong đó chỉ có các cột khóa nối đã được chỉ định trong chỉ mục được truy vấn. Oracle cũng có thể lựa chọn phương thức Skip Scan; trình tối ưu hóa sẽ phân tích histogram của cột DEPTNO (nếu có) để xác định phương thức truy cập tối ưu với chi phí thấp nhất.
Mẹo: Nếu kích thước của các chỉ mục tương đối nhỏ so với tổng kích thước của bảng, việc sử dụng Fast Full Scan có thể mang lại cải thiện hiệu suất. Tuy nhiên, đối với các chỉ mục lớn chứa nhiều cột của bảng, Fast Full Scan có thể làm giảm hiệu suất tổng thể.
3. Chiến lược Skip Scans
Skip Scan giúp tối ưu hóa truy vấn bằng cách cho phép sử dụng chỉ mục kết hợp ngay cả khi cột đầu tiên không xuất hiện trong điều kiện WHERE. Điều này làm cho việc thực hiện Skip Scan trở nên nhanh chóng hơn, vì nó yêu cầu ít lượt đọc hơn. Dưới đây là một ví dụ minh họa sự khác biệt giữa việc sử dụng Skip Scan và Fast Full Scan.
Trong ví dụ, tùy chọn thứ hai áp dụng thao tác INDEX_SS (SKIP SCAN), yêu cầu chỉ 21 logical reads và 17 physical reads. Trong khi đó, tùy chọn đầu tiên thực hiện INDEX (FAST FULL SCAN), cần số lượng logical và physical reads lớn hơn nhiều.
Giải thích:
- Logical Reads (Consistent Gets): Là số lần dữ liệu được truy xuất từ bộ nhớ (cache) của Oracle. Nếu dữ liệu đã có sẵn trong bộ nhớ, đó tính là một logical read và không yêu cầu truy cập vào ổ cứng.
- Physical Reads: Xảy ra khi Oracle không tìm thấy dữ liệu trong bộ nhớ và phải đọc từ ổ cứng, thường tốn thời gian hơn so với logical reads.
Để trình tối ưu hóa lựa chọn Skip Scan, có thể cần phải sử dụng hint trong truy vấn. Hint này sẽ ảnh hưởng đến quyết định của trình tối ưu hóa về chiến lược thực thi.
Mẹo: Đối với các bảng lớn có chỉ mục kết hợp, 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 xuất hiện trong điều kiện truy vấn.
4. Kết nối và Thảo luận
Nếu bạn có bất kỳ câu hỏi nào hoặc muốn trao đổi thêm về bài viết này, hãy kết nối với tôi qua LinkedIn và Facebook:
- LinkedIn: Nguyen Trung Nam
- Facebook: Trung Nam Nguyen
Rất mong được kết nối và cùng thảo luận!
source: viblo