Điều chỉnh SQL với Optim Query Tuner, Phần 1: Tìm hiểu về các đường dẫn truy cập

SQL là một ngôn ngữ khai báo theo nghĩa là chỉ mô tả dữ liệu quan trọng trong chương trình, không mô tả thuật toán để thu thập dữ liệu. Vì vậy, thường có nhiều cách để đáp ứng một câu lệnh SQL cụ thể. Những cách khác nhau này được gọi là các đường dẫn truy cập hoặc các kế hoạch truy cập. Để đơn giản, bài này đề cập đến một cách cụ thể để đáp ứng một câu lệnh SQL như là đường dẫn truy cập. Mặc dù các đường dẫn truy cập khác nhau cho cùng một câu lệnh SQL tạo ra cùng một tập kết quả như nhau, thì chúng hầu như không thể thực hiện nhiệm vụ với một mức hiệu năng như nhau. Trình biên dịch SQL sử dụng tối ưu hóa truy vấn để chọn đường dẫn truy cập thực hiện tốt nhất cho bất kỳ câu lệnh SQL cụ thể nào (tất nhiên là trong một khoảng thời gian hợp lý).

pdf20 trang | Chia sẻ: lylyngoc | Lượt xem: 1598 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Điều chỉnh SQL với Optim Query Tuner, Phần 1: Tìm hiểu về các đường dẫn truy cập, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Điều chỉnh SQL với Optim Query Tuner, Phần 1: Tìm hiểu về các đường dẫn truy cập Giới thiệu SQL là một ngôn ngữ khai báo theo nghĩa là chỉ mô tả dữ liệu quan trọng trong chương trình, không mô tả thuật toán để thu thập dữ liệu. Vì vậy, thường có nhiều cách để đáp ứng một câu lệnh SQL cụ thể. Những cách khác nhau này được gọi là các đường dẫn truy cập hoặc các kế hoạch truy cập. Để đơn giản, bài này đề cập đến một cách cụ thể để đáp ứng một câu lệnh SQL như là đường dẫn truy cập. Mặc dù các đường dẫn truy cập khác nhau cho cùng một câu lệnh SQL tạo ra cùng một tập kết quả như nhau, thì chúng hầu như không thể thực hiện nhiệm vụ với một mức hiệu năng như nhau. Trình biên dịch SQL sử dụng tối ưu hóa truy vấn để chọn đường dẫn truy cập thực hiện tốt nhất cho bất kỳ câu lệnh SQL cụ thể nào (tất nhiên là trong một khoảng thời gian hợp lý). Nếu bạn là một người phát triển, người quản trị cơ sở dữ liệu (DBA), hoặc chuyên gia điều chỉnh truy vấn, điều quan trọng là bạn hiểu những điều cơ bản về các đường dẫn truy cập đến mức bạn có thể điều chỉnh đúng các truy vấn và tải truy vấn trước khi chúng gây ra các vấn đề trong môi trường sản xuất của bạn. Sự hiểu biết cơ bản này, cùng với sự hiển thị trực quan và lời khuyên điều chỉnh do các giải pháp điều chỉnh truy vấn Optim của IBM cung cấp, có thể giúp cho bạn hiệu quả hơn với nhiệm vụ này. Sau khi giới thiệu các đường dẫn truy cập và thực hiện truy vấn, bài này mô tả các phương thức truy cập phổ biến nhất và các phương thức nối được DB2® cho z/OS hỗ trợ. Tiếp theo, bài này mô tả một đường dẫn truy cập được trình tối ưu hóa DB2 cho z/OS chọn và duyệt qua biểu đồ đường dẫn truy cập để giải thích thông tin quan trọng liên quan đến việc chọn lựa đường dẫn truy cập. Bài này kết thúc với một kịch bản mẫu diễn tả cách sử dụng chú thích truy vấn, một tính năng trong Optim Query Tuner giúp bạn phân tích truy vấn bằng cách cung cấp thông tin thống kê quan trọng trực tiếp trong câu lệnh SQL. Nếu bạn muốn có cơ hội tự mình tương tác với các biểu đồ đường dẫn truy cập, được chứa trong một tệp dự án mẫu mà bạn có thể thu được từ phần tải về của bài này. Bạn có thể nhập tệp dự án vào Data Studio (gói độc lập với Fix Pack 1 hoặc mới hơn) hoặc bất kỳ một trong các sản phẩm Optim Query Tuner nào. Bạn không cần có một kết nối với cơ sở dữ liệu để tương tác với các kết quả phân tích, được gắn nhãn tương ứng với các số của hình vẽ trong bài này. Để nhập khẩu dự án mẫu, hãy làm như sau: 1. Mở Data Perspective (Phối cảnh dữ liệu) của sản phẩm độc lập Data Studio hoặc Optim Query Tuner của bạn. 2. Chọn File > Import.... 3. Trong Import Wizard (Trình hướng dẫn nhập khẩu), chuyển hướng đến Query Tuner > Projects, sau đó nhấn Next. 4. Nhấn Browse.. (Duyệt) và chọn thư mục chứa tệp zip tải về. Điều này làm xuất hiện một danh sách các dự án trong cửa sổ Projects (Các dự án). 5. Chọn sampleaccesspathproject và nhấn Finish (Kết thúc). 6. Bây giờ dự án mẫu sẽ xuất hiện trong Project Explorer (Trình thám hiểm dự án) của bạn. Nếu bạn không thấy Project Explorer Window, hãy đảm bảo bạn đang ở trong Data Perspective và chọn Window > Reset Perspective. Ngoài ra, bạn có thể chọn Window > Show View > Project Explorer. Về các giải pháp điều chỉnh truy vấn Optim Các giải pháp điều chỉnh truy vấn Optim cung cấp một môi trường để nhận biết và điều chỉnh việc thực hiện các câu lệnh SQL không chạy với các lời khuyên và các công cụ có thể trợ giúp hướng dẫn bạn đến một giải pháp. Các khả năng điều chỉnh truy vấn được cung cấp trong các sản phẩm sau:  Các khả năng định dạng truy vấn và điều chỉnh truy vấn đơn lẻ, cơ bản có sẵn trong bản Data Studio 2.2.1 (cả bản độc lập lẫn bản IDE). Sản phẩm này có sẵn miễn phí cho cả hai DB2 cho z/OS và DB2 cho Linux®, UNIX® và Windows®. Cần hiểu rõ rằng trong khi thông tin trong loạt bài này giải thích cách bạn có thể sử dụng Data Studio để giải thích các giản đồ đường dẫn truy cập, thì không phải tất cả các khả năng được mô tả có sẵn trong Data Studio.  Định dạng truy vấn và điều chỉnh truy vấn đơn lẻ, cũng như tập các trình tư vấn lớn hơn, có sẵn trong Optim Query Tuner. Sản phẩm này hiện có sẵn cho cả hai DB2 cho z/OS và DB2 cho Linux, UNIX, và Windows.  Điều chỉnh tải truy vấn, điều chỉnh truy vấn đơn lẻ, và toàn bộ tập các trình tư vấn có sẵn trong Optim Query Workload Tuner (Trình điều chỉnh tải truy vấn Optim). Sản phẩm này chỉ có sẵn cho DB2 cho z/OS (tại thời điểm viết bài này). Tóm lại, loạt bài này sử dụng tên Optim Query Tuner (Trình điều chỉnh truy vấn Optim) để nói đến tập các trình tư vấn và các công cụ mà các giải pháp điều chỉnh truy vấn Optim cung cấp. Ở đây các tên sản phẩm cụ thể, thích hợp được cung cấp khi mô tả các khả năng có thể không có sẵn trong tất cả các sản phẩm được liệt kê ở trên. Về đầu trang Cách đọc một biểu đồ đường dẫn truy cập Một biểu đồ đường dẫn truy cập không chỉ mô tả "các thông tin chi tiết hoạt động" về thực hiện truy vấn, mà nó còn mô tả cách dữ liệu di chuyển. Một nút lá của một biểu đồ đường dẫn truy cập hoặc là một nút bảng, một nút tệp công việc (workfile), hoặc một nút chỉ mục biểu diễn một nguồn dữ liệu trong kế hoạch thực hiện truy vấn (Hình 1 cho thấy các ví dụ về từng kiểu nút này). Dữ liệu di chuyển từ dưới cùng lên (như được hiển thị trong biểu đồ) và được các nút hoạt động trong biểu đồ đường dẫn truy cập xử lý. Bảng 1 mô tả đầu vào, đầu ra, và chức năng của các nút hoạt động thường xuất hiện trong một biểu đồ đường dẫn truy cập Optim Query Tuner. Bảng 1. Các hoạt động tiêu biểu được hiển thị trong Optim Query Tuner Nút hoạt Đầu vào Đầu vào Đầu ra Mô tả chức năng động đầu tiên thứ hai IXSCAN Nút chỉ mục Không có Một tập các mã định danh bản ghi đủ điều kiện (các RID) Quét các chỉ mục để lấy ra các mã định danh đủ điều kiện trong một vùng khóa chỉ mục cụ thể. FETCH Một tập các RID Table node Một tập các bản ghi đủ điều kiện Tìm nạp các bản ghi dữ liệu và các trang dữ liệu tương ứng dựa trên các RID. Áp dụng các biến vị ngữ nếu có. TBSCAN Nút bảng Không có Một tập các bản ghi đủ điều kiện Quét vùng bảng đích tuần tự để tìm nạp các trang dữ liệu và áp dụng các biến vị ngữ cho các bản ghi nếu có. SORT Một tập các bản ghi hoặc các RID Không có Một tập các bản ghi đã sắp xếp hoặc các RID Sắp xếp đầu vào theo thứ tự số trang (cho các RID) hoặc sắp xếp thứ tự khóa (với các bản ghi).. WFSCAN Nút tệp công việc Không có Một tập các bản ghi Quét tệp công việc. Quét vùng bảng tệp công việc đích một cách tuần tự để tìm nạp các trang dữ liệu và áp dụng các biến vị ngữ cho các bản ghi nếu có. NLJOIN Một tập các bản ghi Một tập các bản ghi Một tập các bản ghi Phép nối vòng lặp lồng nhau. Với mỗi bản ghi đủ điều kiện từ đầu vào đầu tiên (bên ngoài), quét đầu vào thứ hai (bên trong) để tìm các bản ghi phù hợp và trả về các bản ghi đã nối. MSJOIN Một tập các bản ghi đã sắp xếp Một tập các bản ghi đã sắp xếp Một tập các bản ghi Phép nối vòng lặp kết hợp. Quét cả hai đầu vào để tìm các bản ghi phù hợp và trả về các bản ghi đã nối. Về đầu trang Các đường dẫn truy cập và thực hiện truy vấn Cách dễ nhất để mô tả các đường dẫn truy cập là dùng một ví dụ. Câu lệnh SQL trong Liệt kê 1 nối ba bảng để tạo ra một báo cáo bán hàng. Số tiền bán hàng được tổng hợp dựa trên trạng thái giới tính và tình trạng hôn nhân của khách hàng. Liệt kê 1. phép nối ba hướng mẫu được sử dụng để minh họa biểu đồ đường dẫn truy cập được hiển thị trong Hình 1 select c.gender_code, c.marital_status_code, sum(od.unit_cost * cust_quantity) from cust_customer c, cust_order_header oh, cust_order_detail od where c.cust_code = oh.cust_code and oh.cust_order_number = od.cust_order_number and c.cust_prov_state_code = 'CA' and od.product_number in (154110, 129170, 129150, 129110, 129140, 130130) group by c.gender_code, c.marital_status_code Theo trực giác, một đường dẫn truy cập là một mô tả thủ tục về việc thực hiện truy vấn có ba thành phần:  Chuỗi nối của các bảng  Thuật toán để quét một bảng (phương thức truy cập)  Thuật toán để thực hiện một hoạt động nối (phương thức nối) Hình 1 là biểu đồ đường dẫn truy cập được tạo bởi Optim Query Tuner cho truy vấn được hiển thị trong Liệt kê 1. Hình 1. Biểu đồ đường dẫn truy cập mẫu với Liệt kê 1 (phép nối ba hướng) (Xem ảnh lớn hơn của Hình 1.) Mỗi một trong ba bảng được tham khảo trong truy vấn được thể hiện trong biểu đồ này như là các nút bảng với các tên bảng tương ứng của chúngs. Bảng đầu tiên trong chuỗi nối là bảng CUST_ORDER_DETAIL, được quét thông qua một chỉ mục được định nghĩa trên cột PRODUCT_NUMBER. Chỉ mục này được thể hiện trong biểu đồ bằng nút chỉ mục được gắn nhãn với tên chỉ mục là SQT01_CUST_ORDER_DETAIL. Trực tiếp trên nút chỉ mục SQT01_CUST_ORDER_DETAIL là nút IXSCAN. Điều này có nghĩa là chỉ mục này được duyệt qua để lấy các mã định danh bản ghi đủ điều kiện (các RID). Sau đó nút FETCH lấy các RID đủ điều kiện để tìm nạp các bản ghi và các trang dữ liệu tương ứng từ vùng bảng trong nhóm bộ đệm DB2. Bảng thứ hai trong chuỗi nối là bảng CUST_ORDER_HEADER, được quét thông qua một chỉ mục trên cột nối có tên là CUST_ORDER_NUMBER. Phương thức truy cập với CUST_ORDER_HEADER, là quét chỉ mục, được biểu diễn theo cùng cách như bảng CUST_ORDER_DETAIL. Bảng cuối cùng trong chuỗi nối là bảng CUST_CUSTOMER, cũng được quét thông qua một chỉ mục được định nghĩa trên cột CUST_CODE. Bây giờ bạn có một cái nhìn tổng quan về các bảng và cách truy cập thông tin (trong trường hợp này là thông qua các chỉ mục), bạn đã sẵn sàng xem xét kỹ hơn các phương thức nối được sử dụng. Nút nối trong biểu đồ cho thấy rằng trình tối ưu hóa DB2 chọn một phép nối vòng lặp lồng nhau (NLJOIN) cho hoạt động nối đầu tiên giữa CUST_ORDER_DETAIL và CUST_ORDER_HEADER. Phép nối này lấy tập kết quả của bảng đầu tiên (CUST_ORDER_DETAIL) và kết quả của bảng thứ hai (CUST_ORDER_HEADER) làm các đầu vào. Sau đó kết quả của hoạt động nối đó sẽ trở thành đầu vào đầu tiên cho hoạt động nối thứ hai (cũng là một phép nối vòng lặp lồng nhau). Nó được nối tới tập kết quả của bảng cuối cùng trong chuỗi nối, CUST_CUSTOMER. Sự hiểu biết về dòng chảy dữ liệu cũng quan trọng bởi vì nó là yếu tố có ảnh hưởng nhất về khía cạnh hiệu năng truy vấn của việc thực hiện truy vấn. Phần còn lại của phần này sẽ hướng dẫn bạn thông qua biểu đồ đường dẫn truy cập thêm một lần nữa từ quan điểm dòng chảy dữ liệu để cho bạn có thể đạt được một sự hiểu biết đầy đủ về khía cạnh hiệu năng của việc thực hiện truy vấn. Số được hiển thị trong mỗi nút là đánh giá của trình tối ưu hóa về giá trị cardinality (số các yếu tố trong một tập hợp) của nguồn dữ liệu cơ bản hoặc nút hoạt động. Ví dụ, số 273 trên nút chỉ mục với SQT01_CUST_ORDER_DETAIL cho biết có 273 khóa chỉ mục riêng biệt. CUST_ORDER_HEADER_PK là một chỉ mục duy nhất; do đó, số lượng các khóa chỉ mục phù hợp chính xác với số lượng các bản ghi (539.526) trong bảng tương ứng. Điều này cũng đúng cho chỉ mục IDX_CUST_CUSTOMER và bảng CUST_CUSTOMER, tương ứng, với 31.284 khóa chỉ mục và các bản ghi. Đối với các chỉ mục không duy nhất, số lượng các khóa chỉ mục ít hơn số lượng các bản ghi. Hơn nữa, tỷ lệ giữa số lượng các bản ghi và số lượng các khóa chỉ mục cho biết, theo trung bình, số lượng các RID (các tập bản ghi có đủ điều kiện) có liên kết với mỗi khóa chỉ mục. Các số xuất hiện trong ba nút bảng trong biểu đồ cho biết kích thước của bảng theo số lượng các bản ghi. Dưới đây là những gì xảy ra trong thời gian thực hiện cho nhánh đầu tiên của phép nối vòng lặp lồng nhau: 1. Hoạt động quét chỉ mục (IXSCAN) trên chỉ mục BQT01_CUST_ORDER_DETAIL diễn ra đầu tiên, vì đó là hoạt động đầu tiên cho bảng đầu tiên trong chuỗi nối. Dựa trên đánh giá của trình tối ưu hóa, có tám RID đủ điều kiện trong vùng khóa chỉ mục đích. 2. Nút tìm nạp sử dụng tám RID đủ điều kiện này để xác định vị trí các bản ghi và trang tương ứng trong vùng bảng, có chứa 560273 bản ghi. Vì có không có biến vị ngữ bổ sung nào được hoạt động nạp áp dụng, nên giá trị cardinality đầu ra của nút tìm nạp cũng là tám. Điều này có nghĩa là sẽ có tám bản ghi đủ điều kiện do hoạt động tìm nạp tạo ra. 3. Sau đó lấy tám bản ghi đủ điều kiện này làm đầu vào đầu tiên cho nút NLJOIN ngay trên nút FETCH. Do cách các phép nối vòng lặp lồng nhau hoạt động, nên nhánh thứ hai (có bốn nút) được thực hiện cho mỗi bản ghi của bảng bên ngoài. Có nghĩa là, bảng bên trong của hoạt động nối sẽ được quét tám lần, một lần cho một trong tám bản ghi đủ điều kiện từ đầu vào bên ngoài. Nhánh thứ hai của nút NLJOIN là giống như nhánh thứ nhất của bảng đầu tiên: 1. Trình tối ưu hóa chọn một chỉ mục duy nhất (CUST_ORDER_HEADER_PK) để truy cập các bản ghi trong bảng CUST_ORDER_HEADER. 2. Như số lượng trong nút IXSCAN và nút FETCH chỉ ra, một bản ghi được tìm thấy trong CUST_ORDER_HEADER mỗi lần thực hiện quét chỉ mục. Do đó, nút NLJOIN sẽ tạo ra tổng cộng tám bản ghi. Tương tự như vậy, nhánh cuối cùng trong biểu đồ đường dẫn truy cập được đánh giá tám lần, một lần cho mỗi bản ghi được nút NLJOIN đầu tiên tạo ra. Vì chọn một chỉ mục duy nhất cho nút IXSCAN (IDX_CUST_CUSTOMER), nên chỉ có một bản ghi sẽ phù hợp trong mỗi lần quét của bảng CUST_CUSTOMER. Vì vậy, tổng cộng tám bản ghi được tạo ra trong tập kết quả cuối cùng. Theo quan điểm hiệu năng, một đường dẫn truy cập thực hiện tốt nên dùng đến số lượng dữ liệu ít nhất với tập kết quả cuối cùng. Trong ví dụ trên, số lượng các bản ghi được tìm nạp từ mỗi bảng được giữ ở mức tối thiểu. Đối với bảng CUST_ORDER_DETAIL, chỉ có tám bản ghi được tìm nạp từ vùng bảng bằng cách sử dụng quét chỉ mục. Ngoài ra, mỗi đầu dò trong đầu vào bên trong của cả hai hoạt động NLJOIN chỉ phù hợp với một bản ghi. Do đó, nếu đánh giá của trình tối ưu hóa là chính xác, đường dẫn truy cập này sẽ là một đường dẫn truy cập rất hiệu quả. (Phần Một nghiên cứu sâu hơn khi sử dụng chú thích truy vấn của bài này mô tả cách bạn có thể xác định xem đánh giá này có đúng không). Về đầu trang Các phương thức truy cập và các phương thức nối khác Trong phần trước, bạn đã tìm hiểu về một kiểu phương thức truy cập, là quét chỉ mục (IXSCAN), và một kiểu phương thức nối, là phép nối vòng lặp lồng nhau (NLJOIN). Phần này trình bày thêm một vài phương thức truy cập, các phương thức nối, và các hoạt động sắp xếp. Việc mô tả mỗi hoạt động bao gồm một biểu đồ đường dẫn Query Tuner để giải thích các ngữ nghĩa hoạt động của nó. Quét vùng bảng (TBSCAN) với các biến vị ngữ giai đoạn-1 và giai đoạn-2 Câu lệnh SQL trong Liệt kê 2 tạo biểu đồ đường dẫn truy cập được hiển thị ở bên phải của ảnh chụp màn hình Optim Query Tuner trong Hình 2. Liệt kê 2. Truy vấn mẫu để minh họa quét bảng trong Hình 2 select count(*) from cust_order_header where cust_total_quantity > 3 and cust_sales_tax > cust_total * 0.03 Hình 2. Biểu đồ đường dẫn truy cập để quét bảng (TBSCAN) với các biến vị ngữ giai đoạn- 1 và giai đoạn-2 (Xem ảnh lớn hơn của Hình 2.) Các biến vị ngữ giai đoạn-1 và giai đoạn-2 (SARGable và số dư) Các biến vị ngữ giai đoạn-1 được áp dụng khi cột hoặc các cột, mà nó phụ thuộc, nằm trong nhóm bộ đệm. Các biến vị ngữ giai đoạn-2 được áp dụng khi cột hoặc các cột, mà nó phụ thuộc, được sao chép từ nhóm bộ đệm đến nhóm bộ nhớ riêng. Phần Tài nguyên có một liên kết đến một chủ đề trong trung tâm thông tin về DB2 cho z/OS nơi bạn có thể tìm thêm thông tin về chủ đề này. Với DB2 cho Linux, UNIX, và Windows, các khái niệm cơ bản tương tự được biết đến là các biến vị ngữ tương ứng là SARGable và số dư. Hình 2 cho thấy một ví dụ về cách bạn có thể hiển thị các mô tả chi tiết của hai nút (bảng CUST_ORDER_HEADER và hoạt động quét bảng (TBSCAN)) từ biểu đồ đường dẫn truy cập. Bạn có thể nhận được các mô tả chi tiết từ bất kỳ nút nào trên biểu đồ chỉ bằng cách nhấn chuột phải vào nút đó và chọn Show Description (Hiển thị mô tả) từ trình đơn ngữ cảnh. Trong Hình 2, bộ mô tả cho nút bảng và bộ mô tả cho nút TBSCAN được hiển thị bên trái của biểu đồ đường dẫn truy cập. Câu lệnh SQL được hiển thị ở dưới cùng của biểu đồ này. Đường dẫn truy cập cho thấy rằng một hoạt động TBSCAN được thực hiện trên bảng CUST_ORDER_HEADER. Điều này có nghĩa là DB2 tìm nạp mọi trang dữ liệu trong vùng bảng một cách tuần tự vào nhóm bộ đệm. Sau đó nó quét mỗi bản ghi trong nhóm bộ đệm để áp dụng biến vị ngữ giai đoạn-1. Các bản ghi đủ điều kiện (chỉ các cột thích hợp) được sao chép vào một nhóm bộ nhớ riêng được một biến vị ngữ giai đoạn-2 lọc. Hàm tổng hợp, COUNT, được áp dụng cho các bản ghi còn lại sau khi biến vị ngữ giai đoạn-2 lọc. Có thể tìm thấy các chi tiết về dòng chảy dữ liệu trong phần các thuộc tính của bộ mô tả TBSCAN. Có 539.526 bản ghi được DB2 quét trong nhóm bộ đệm (giá trị (Input Cardinality trên bộ mô tả TBSCAN). Trình tối ưu hóa DB2 đánh giá rằng 473.785,44 bản ghi vẫn còn lại sau biến vị ngữ giai đoạn-1 (xem thuộc tính Stage 1 Returned Rows (Các hàng được trả về của giai đoạn-1) trong bộ mô tả) và 4.737,9688 bản ghi vẫn còn lại sau biến vị ngữ giai đoạn-2 (xem thuộc tính Stage 2 Returned Rows trong bộ mô tả). Chỉ có một bản ghi được tạo ra, do hàm COUNT. Thuộc tính Prefetch trong bộ mô tả chứa giá trị 'S', cho biết rằng việc tìm nạp trước tuần tự sẽ bắt đầu trong thời gian thực hiện để cải thiện hiệu năng vào/ra (I/O) cho việc tìm nạp các trang dữ liệu từ vùng bảng. Quét bảng (TBSCAN) với việc lược bớt phân vùng Câu lệnh SQL trong Liệt kê 3 tạo ra biểu đồ đường dẫn truy cập được hiển thị trong Hình 3. Liệt kê 3. Truy vấn mẫu để minh họa quét bảng với việc lược bớt phân vùng trong Hình 3 select count(*) from cust_order_header where cust_total_quantity > 3 and cust_sales_tax > cust_total * 0.03 and cust_order_number between 100000 and 580000 Hình 3. Biểu đồ đường dẫn truy cập để quét bảng (TBSCAN) với việc lược bớt phân vùng (Xem ảnh lớn hơn của Hình 3.) Các khóa hạn chế Các bảng, được phân vùng bởi các khóa, sử dụng các khóa giới hạn để chỉ ra các đường ranh giới của các phân vùng; một khóa giới hạn cho mỗi phân vùng. Như hiển thị trong bộ mô tả nút bảng, có 10 phân vùng trong vùng bảng, và khóa giới hạn cho phân vùng thứ chín là 625.000. Vì có một biến vị ngữ là cust_order_number between 100000 and 580000, trên một cột phân vùng, nên trình tối ưu hóa có thể giới hạn TBSCAN đến chín phân vùng đầu tiên. Sự tối ưu hóa này được mô tả trong bộ mô tả TBSCAN. Thuộc tính Page_Ranges chứa một vùng, vùng 1, bao trùm phân vùng 1 đến phân vùng 9. Trong lúc thực hiện, phân vùng 10 hoàn toàn bị bỏ qua để có hiệu năng tốt hơn. Quét chỉ mục (IXSCAN) với các biến vị ngữ phù hợp Câu lệnh SQL trong Liệt kê 4 tạo ra biểu đồ đường dẫn truy cập được hiển thị trong Hình 4. Liệt kê 4. Truy vấn mẫu để minh họa quét chỉ mục phù hợp trong Hình 4 select crdt_method_code, cust_total_quantity, count(*) from cust_order_header where cust_total_quantity - 2 > 1 and crdt_method_code > 20 and cust_order_date > '2007-01-01-01.24.58.017000' group by crdt_method_code, cust_total_quantity (Lưu ý rằng trong ví dụ trên, cột cust_order_date được định nghĩa với một kiểu là TIMESTAMP.) Hình 4. Biểu đồ đường dẫn truy cập để quét chỉ mục (IXSCAN) với các biến vị ngữ phù hợp (Xem ảnh lớn hơn của Hình 4.) Quét chỉ mục thường được thể hiện trong Query Tuner như là một nhóm có bốn nút trong biểu đồ đường dẫn truy cập. Như thể hiện trong Hình 4, CUST_ORDER_HEADER được truy cập thông qua việc quét chỉ mục phù hợp với chỉ mục BQT01_CUST_ORDER_HEADER, được định nghĩa trên cột CRDT_METHOD_CODE (bạn có thể thấy cột này bằng cách mở rộng bộ mô tả IXSCAN thêm một chút so với những gì được hiển thị trong Hình 4). Các chi tiế