Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Khai thác các chỉ mục XML để tăng hiệu năng truy vấn XML trong DB2 doc
Nội dung xem thử
Mô tả chi tiết
Khai thác các chỉ mục XML để tăng hiệu năng truy vấn XML trong DB2 9
Matthias Nicola, Chuyên gia DB2 , IBM Silicon Valley Laboratory
Tóm tắt: DB2® 9 đảm bảo lưu trữ pureXML và cung cấp XQuery và SQL/XML
như là các ngôn ngữ truy vấn. Các chỉ mục XML rất cần thiết cho hiệu suất truy
vấn cao, nhưng việc sử dụng chúng để đánh giá truy vấn phụ thuộc vào cách tạo
nên các vị từ truy vấn. Bài viết này trình bày một tập các hướng dẫn để viết các
truy vấn XML và tạo các chỉ mục XML một cách phù hợp để cho các chỉ mục
tăng tốc độ truy vấn của bạn như mong muốn. Ngoài ra học để tìm kiếm trong các
kế hoạch thực hiện truy vấn XML nhằm phát hiện các vấn đề hiệu năng và tìm ra
cách sửa chữa chúng. Một "cẩm nang" ("cheat sheet") có thể tải về tóm tắt các
hướng dẫn quan trọng nhất. [30.07.2009: Bài viết này đã được cập nhật cho DB2
9.5 và 9.7, trong đó có thêm các truy vấn thí dụ SQL/XML.--Biên tập.]
Giới thiệu
DB2 9 cung cấp lưu trữ pureXML, cùng với các chỉ mục XML, XQuery và
SQL/XML như ngôn ngữ truy vấn, hỗ trợ lược đồ XML, các mở rộng XML đến
các tiện ích như: Nhập/Xuất và Chạy báo cáo trạng thái (Runstats). Cũng như đối
với các truy vấn quan hệ, các chỉ mục là điều quyết định đối với hiệu suất cao của
XQuery và các câu lệnh SQL/XML của bạn. DB2 cho phép bạn định nghĩa các chỉ
mục XML với đường dẫn cụ thể trên các cột XML. Điều đó có nghĩa bạn có thể sử
dụng chúng để đánh chỉ mục các phần tử và các thuộc tính được chọn, thường
được sử dụng trong các vị từ và các phép kết nối. Ví dụ, khi sử dụng dữ liệu mẫu
trong Hình 1, chỉ mục sau là idx1 sẽ có ích cho việc tìm kiếm bảng và các kết nối
dựa vào các định danh (ID) tác giả trên tất cả các tài liệu trong cột XML bookinfo
của bảng books.
create table books(bookinfo XML);
create index idx1 on books(bookinfo)
generate keys using xmlpattern
'/book/authors/author/@id'
as sql double;
Hình 1. Tài liệu XML thí dụ theo định dạng văn bản (tuần tự) và định dạng
(phân cấp) đã được phân tích
Do DB2 không bắt buộc bạn phải kết hợp một lược đồ XML đơn với tất cả các tài
liệu trong một cột XML, các kiểu dữ liệu cho các phần tử và các thuộc tính cụ thể
không có quyền ưu tiên (a-priori) đã biết. Vì vậy, mỗi chỉ mục XML đòi hỏi bạn
phải chỉ định một kiểu đích. Bạn sẽ thấy sau trong bài viết này lí do các kiểu lại
quan trọng. Các kiểu dữ liệu có sẵn cho các chỉ mục XML là:
VARCHAR(n): Cho các nút có các giá trị chuỗi có chiều dài tối đa n đã
biết.
VARCHAR HASHED: Cho các nút có các giá trị chuỗi có độ dài tùy ý.
Chỉ mục này có chứa các giá trị băm (hash) của chuỗi thực tế và có thể
được sử dụng chỉ cho các vị từ so sánh bằng, không cho vị từ so sánh xếp
hạng (range).
DOUBLE: Cho các nút có kiểu số bất kỳ.
DATE and TIMESTAMP: Cho các nút có các giá trị ngày tháng hoặc dấu
thời gian.
Chiều dài của một chỉ mục VARCHAR(n) là một sự ràng buộc cứng nhắc. Nếu
bạn chèn một tài liệu vào chỗ mà ở đó giá trị của một phần tử có chỉ mục hoặc
thuộc tính vượt quá độ dài tối đa n, việc chèn sẽ không thành công. Tương tự, câu
lệnh create index cho một chỉ mục VARCHAR(n) không chạy nếu bắt gặp một giá
trị lớn hơn n.
Theo mặc định, các kiểu dữ liệu cho các chỉ mục DOUBLE, DATE hoặc
TIMESTAMP không phải là một sự ràng buộc khó thực hiện. Ví dụ, chỉ mục idx1
trên thuộc tính định danh (ID) tác giả được định nghĩa là DOUBLE vì người ta
mong ID này có giá trị số. Nếu bạn chèn thêm một tài liệu vào chỗ mà ở đó một
ID của tác giả có giá trị "MN127", đây không phải số, tài liệu vẫn được chèn vào,
nhưng giá trị " MN127" không được thêm vào chỉ mục. Điều này là chính xác và
an toàn vì chỉ mục DOUBLE chỉ có thể đánh giá các vị từ số sẽ không bao giờ
khớp với giá trị "MN127". Như vậy, giá trị này có thể được loại bỏ khỏi chỉ mục
một cách an toàn.
Từ DB2 9.5 bạn có thể thêm câu tùy chọn REJECT INVALID VALUES vào định
nghĩa chỉ mục XML của bạn. Câu này buộc tuân theo các kiểu DOUBLE, DATE
hoặc TIMESTAMP của các chỉ mục như là một sự ràng buộc cứng nhắc. Nếu bạn
định nghĩa chỉ mục sau đây, một tài liệu mà ở đó một định danh (ID) tác giả có giá
trị "MN127" không thể được bổ sung và cần không có mặt trong cột XML, khi
bạn tạo chỉ mục này.
create index idx1 on books(bookinfo)
generate keys using xmlpattern
'/book/authors/author/@id'
as sql double REJECT INVALID VALUES;
Bạn có thể tìm thấy thêm các chi tiết về định nghĩa các chỉ mục XML trong "DB2
pureXML Cookbook". Trong thảo luận sau đây về cách sử dụng chỉ mục XML
chúng tôi cũng giả định rằng bạn đã quen thuộc với các khái niệm cơ bản về truy
vấn dữ liệu XML trong DB2. Để biết thêm thông tin, tham khảo các bài viết trước
đây, "Query DB2 XML Data with SQL" (Truy vấn dữ liệu XML DB2 với SQL)
(developerWorks, 03.2006) và "Query DB2 XML data with XQuery" (Truy vấn
dữ liệu XML DB2 với Xquery) (developerWorks, 04.2006) cho một sự khởi đầu,
cũng như "pureXML in DB2 9: Which way to query your XML data?" (pureXML
trong DB2 9: Dùng cách nào để truy vấn dữ liệu XML của bạn) (developerWorks,
06.2006) với nhiều ví dụ và chi tiết hơn.
Tính hợp lệ của chỉ mục XML đối với các câu lệnh XQuery và SQL/XML
Cũng như đối với các truy vấn quan hệ, các chỉ mục là điều quyết định đảm bảo
hiệu năng cao của các câu lệnh XQuery và SQL/XML của bạn. Khi ứng dụng của
bạn trình ra một truy vấn quan hệ hay truy vấn XML cho DB2, trình biên dịch truy
vấn so sánh các vị từ truy vấn với các định nghĩa chỉ mục hiện có và quyết định
xem có thể sử dụng bất kỳ các chỉ mục có sẵn nào để thực hiện truy vấn không.
Quá trình này được gọi là "khớp chỉ mục" và tạo một tập (có thể rỗng) của các chỉ
mục hợp lệ đối với truy vấn cụ thể. Tập này là đầu vào cho trình tối ưu hóa
(optimizer) theo chi phí, nó quyết định có hay không sử dụng các chỉ mục hợp lệ
bất kỳ. Trong bài viết này, tập trung vào khớp chỉ mục chứ không phải lựa chọn
chỉ mục của trình tối ưu hóa. Không có nhiều thứ mà bạn có thể làm với các quyết
định của trình tối ưu hóa, trừ chạy "runstats" để đảm bảo trình tối ưu hóa với các
thống kê chính xác về dữ liệu của bạn. Tuy nhiên, có rất nhiều thứ mà bạn có thể
làm để đảm bảo khớp chỉ mục.
Khớp chỉ mục thường là dễ trong kiểu quan hệ. DB2 có thể sử dụng một chỉ mục
được định nghĩa trên một cột quan hệ duy nhất để trả lời bất kỳ vị từ bằng hay vị
từ xếp hạng trên cột này. Tuy nhiên, với các cột XML điều này phức tạp hơn.
Trong khi một chỉ mục trên một cột quan hệ chứa tất cả các giá trị từ cột đó, một
chỉ mục XML chỉ chứa các giá trị của các nút mà nó khớp cả hai mẫu XML và
kiểu dữ liệu XML trong định nghĩa chỉ mục. Vì thế, một chỉ mục XML có thể
được dùng để đánh giá một vị từ truy vấn XML chỉ khi chỉ mục này có kiểu dữ
liệu "đúng" và chứa ít nhất tất cả các nút XML nào thỏa mãn vị từ đó. Do đó, có
hai yêu cầu quan trọng để lựa chọn chỉ mục XML:
1. Định nghĩa chỉ mục XML là bằng hoặc ít hạn chế hơn vị từ truy vấn (bao
hàm - "containment").