Cơ sở dữ liệu - Chương 7: Chỉ mục (index)

Cơ sở dữ liệu - Chương 7: Chỉ mục (index) Nếu không có chỉ mục, phải sử dụng phương pháp duyệt bảng SQL server cung cấp công cụ Database Engine Tuning Advior giúp phân tích môi trường và chọn index phù hợp

pdf79 trang | Chia sẻ: huyhoang44 | Lượt xem: 783 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Cơ sở dữ liệu - Chương 7: Chỉ mục (index), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
GV Phi Loan - Khoa CNTT – HUI 1 GV Phi Loan - Khoa CNTT – HUI Nội dung • Cơ bản về chỉ mục • Chỉ mục: mục đích và các loại chỉ mục • Kế hoạch thực thi chỉ mục • Rebuild/ Reorganize chỉ mục 2 GV Phi Loan - Khoa CNTT – HUI Heap file • Môĩ ba ̉n ghi (record) đều có 1 mã nhâ ̣n da ̣ng duy nhất (unique identifier), go ̣i tắt là rid. • Tât́ cả các ba ̉n ghi được lưu trư ̃ theo thư ́ tự ngẫu nhiên (random order) vào file. • File không xếp thư ́ tự (unordered file) được go ̣i là heap file. Các ba ̉n ghi sẽ đuợc lưu trữ trong các trang (page) có cùng kích cỡ. 3 GV Phi Loan - Khoa CNTT – HUI Cá̂u trúc heap file 4 GV Phi Loan - Khoa CNTT – HUI Tìm kiêḿ và chỉ mục • Câú trúc của heap file không hỗ trợ nhiè̂u cho việc tìm kié̂m • Đẻ̂ tìm các bản ghi thỏa mãn 1 điè̂u kiện nào đó, ta cần phải tìm trên tất ca ̉ các trang dư ̃ liệu. • File chỉ mục là 1 cấu trúc file phụ đẻ̂ hỗ trợ việc tìm kié̂m rid của các bản ghi thỏa mãn điè̂u kiện dò tìm (search condition) 5 GV Phi Loan - Khoa CNTT – HUI Chỉ mục - Indexes • Mục đích: cải thiện việc truy tìm dữ liệu. • Ý tưởng: tương tự như index của sách. – Mỗi mục trong chỉ mục (index entry) sẽ chư ́a 1 thuật ngư ̃ (term) và 1 con tro ̉ (pointer) đẻ̂ chi ̉ đêń trang chư ́a thuật ngư ̃ đó trong quyẻ̂n sách. – Các entry được săṕ xé̂p theo thuật ngư ̃ đẻ̂ ta ̣o thành 1 bảng go ̣i là bảng chi ̉ mục. – Thay vì duyệt (scan) ca ̉ quyẻ̂n sách, chỉ câǹ truy xuất đêń bảng chi ̉ mục giúp đi ̣nh vị nhanh trang chư ́a thuật ngư ̃ cần tìm. 6 GV Phi Loan - Khoa CNTT – HUI Chỉ mục - Index • Index chứa: – 1 tập hợp các đầu vào chỉ mục (index entry) – Cơ chế dò tìm entry dựa vào giá trị search key • Các cơ chế dò tìm: – Các index entry được xếp theo search key như ISAM hay B+ tree – Hash index 7 GV Phi Loan - Khoa CNTT – HUI B-tree indexes • B-tree index nằm riêng trên như ̃ng trang index, có 1 mư ́c gốc (root level), mô ̣t hay nhiều mức trung gian (intermediate levels), và 1 mư ́c lá (leaf) hay mư ́c node. • Các cô ̣t được sắp xếp bởi b-tree index được go ̣i là cô ̣t khóa (key) của index. • Sự khác nhau giư ̃a chỉ mục clustered và non- clustered là số lượng và loa ̣i dư ̃ liệu được lưu trư ̃ ở mư ́c lá. 8 GV Phi Loan - Khoa CNTT – HUI Index và truy vá̂n tối ưu • Các index được thié̂t kế tốt sẽ giảm thao tác I/O đĩa và tiêu tôń tài nguyên ít hơn. • Các chỉ mục có thẻ̂ hô ̉ trợ cho nhiè̂u loa ̣i truy vâń chứa các lệnh SELECT, UPDATE, DELETE, và MERGE. • Khi thực thi truy vâń, query optimizer đánh giá và cho ̣n phương pháp nào hư ̃u hiệu nhât́ đê ̉ khôi phuc ̣ dư ̃ liệu – Duyệt qua toàn bô ̣ bảng (table scan) – Duyệt qua 1 hay nhiè̂u chỉ mục né̂u có. 9 GV Phi Loan - Khoa CNTT – HUI Index và truy vá̂n tối ưu • Khi duyệt toàn ba ̉ng, query optimizer đo ̣c tất ca ̉ các hàng trong ba ̉ng, và trích ra các hàng thỏa mãn điêù kiện truy vấn. • Việc duyệt ba ̉ng phát ra nhiè̂u thao tác I/O đĩa, tiêu tốn nhiều tài nguyên hơn. • Phương pháp duyệt ba ̉ng (table scan) có thẻ̂ là phương pháp hiê ̣u qua ̉ nhất nếu ba ̉ng kết qua ̉ của truy vấn chư ́a hầu hết các hàng có trong ba ̉ng. 10 GV Phi Loan - Khoa CNTT – HUI Index và truy vá̂n tối ưu • Khi query optimizer sử dụng index, nó dò tìm cột khóa của chỉ mục, tìm vị trí lưu trữ của hàng trong ba ̉ng và trích ra hàng dữ liê ̣u tho ̉a mãn điêù kiê ̣n truy vấn. • Viê ̣c dò tìm chi ̉ mục nhanh hơn nhiều so với duyệt ba ̉ng, vì chỉ mục chi ̉ chư ́a 1 số cột và các hàng trong chi ̉ mục đã được sắp xêṕ. 11 GV Phi Loan - Khoa CNTT – HUI Phân loại cô ̣t trong mê ̣nh đề WHERE • Cột bằng (Equality column): các cột xuá̂t hiện trong mệnh đề WHERE với dá̂u =. • Cột không bằng (Inequality column): các cô ̣t xuá̂t hiện trong mệnh đề WHERE với dá̂u (>) hay BETWEEN. 12 GV Phi Loan - Khoa CNTT – HUI Thiêt́ kế chỉ mục hiệu quả • Khi xây dựng chỉ mục trên nhiè̂u cột, cần phải liệt kê các cột băǹg trước khi liệt kê các cột không bằng. – Khi cho ̣n thư ́ tự các cột bằng, nên liệt kê cột hay cho ̣n nhiều nhất. – Sau khi liệt kê tất ca ̉ các cột bằng, tiếp tục liê ̣t kê các cột không bằng, nên liê ̣t kê cột không bằng hay chọn nhiè̂u nhất. 13 GV Phi Loan - Khoa CNTT – HUI Thiêt́ kế chỉ mục hiệu quả • Khi ké̂t nó̂i với 1 bảng khác, nên ta ̣o chỉ mục cho cô ̣t được dùng ké̂t nó̂i với ba ̉ng khác. 14 GV Phi Loan - Khoa CNTT – HUI Thiêt́ kế chỉ mục • Thié̂t kế chỉ mục không tốt, hoă ̣c không dùng chỉ mục đêù là nguyên nhân cơ ba ̉n cho viê ̣c “bottlenecks” cho các ứng dụng của database. • Chọn lựa đúng chi ̉ mục cần pha ̉i xét sự cân đôí giư ̃a tốc đô ̣ truy vấn và chi phí câ ̣p nhâ ̣t. • Các chỉ mục ít cô ̣t đòi ho ̉i không gian đĩa ít và chi phí ba ̉o trì thấp. • Các chỉ mục nhiều cô ̣t có thê ̉ hô ̉ trợ cho nhiều truy vấn hơn . 15 GV Phi Loan - Khoa CNTT – HUI Phân loại chỉ mục • Các loại chi ̉ mu ̣c trong SQL Server 2012: – Clustered – Non-clustered – Covering – Filtered – Primary XML – Secondary XML {Path, Property, Value} – Spatial – Full-text – Columnstore 16 GV Phi Loan - Khoa CNTT – HUI Clustered indexes – Clustered indexes sắp xé̂p và lưu trữ các hàng dư ̃ liê ̣u trong ba ̉ng hay view theo giá trị khóa cu ̉a index. – Môĩ ba ̉ng chỉ có duy nhất 1 clustered index – Hình a ̉nh tượng trưng của clustered index là telephone book 17 GV Phi Loan - Khoa CNTT – HUI Clustered indexes – Khi ba ̉ng có chứa clustered index thì các hàng cu ̉a ba ̉ng được xêṕ thư ́ tự. Ba ̉ng còn được go ̣i là clustered table. – Nêú ba ̉ng không chứa clustered index thì các hàng của ba ̉ng lưu trữ tự do và được gọi là heap 18 GV Phi Loan - Khoa CNTT – HUI unordered heap • Cũng có thẻ̂ tạo 1 ba ̉ng không câǹ có clustered index  dư ̃ liệu được lưu trư ̃ vào 1 heap không xé̂p thư ́ tự. Môĩ hàng sẽ được xác định bởi mã RowID của heap. • RowID là vị trí vâ ̣t l{ thực sự của hàng, gồm 3 giá trị: FieldID:PageNum:SlotNum, và không thê ̉ truy vâń trực tié̂p đến nó được. • Chỉ mục non-clustered indexes lưu trư ̃ RowID của heap thay vì lưu trữ khóa chỉ mục clustered. 19 GV Phi Loan - Khoa CNTT – HUI Ví dụ minh họa clustered index with an identity column as the clustered index key. The first name is the data column. 20 GV Phi Loan - Khoa CNTT – HUI 21 GV Phi Loan - Khoa CNTT – HUI Nonclustered indexes – Chi ̉ mục nonclustered tách riêng kho ̉i ba ̉ng dữ liê ̣u. – Chi ̉ mục nonclustered chứa các giá trị khóa và mỗi giá tri ̣ khóa có 1 con trỏ (pointer) trỏ đến hàng dư ̃ liê ̣u chư ́a giá trị khóa đó. Con tro ̉ này được gọi là row locator. – Trong SQL Server 2008, mô ̣t ba ̉ng có thê ̉ có tới 999 nonclustered index 22 GV Phi Loan - Khoa CNTT – HUI Nonclustered indexes –Cấu trúc của row locator phụ thuô ̣c vào các trang dư ̃ liê ̣u được lưu trư ̃ trong heap hay trong ba ̉ng clustered. • Né̂u trong heap, row locator là 1 con tro ̉ tro ̉ đêń RowID cu ̉a heap • Nếu trong ba ̉ng clustered, row locator là khóa chỉ mục clustered –Hình a ̉nh tượng trưng của nonclustered index là ba ̉ng chỉ mu ̣c nằm cuối sách 23 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ minh họa nonclustered index first name as the key column. The non-clustered index includes pointers to the clustered index key column.24 GV Phi Loan - Khoa CNTT – HUI 25 GV Phi Loan - Khoa CNTT – HUI Covering Indexes • Né̂u chỉ mục non-clustered chứa thêm các thông tin cần thié̂t cho 1 truy vâń được gọi là covering index. • Dùng covering indexes được xem như chiến lược chính để cải thiện việc thực thi truy vá̂n. 26 GV Phi Loan - Khoa CNTT – HUI Covering Indexes • Nhờ đưa thêm thông tin vào chi ̉ mục non-clustered mà tránh được thao tác look up. – Look up: thao tác mà hệ thống sau khi tìm kiếm trên cây index xong, pha ̉i nhảy tới bản ghi tương ứng trong bảng dư ̃ liê ̣u để lấy các trường dữ liệu cần trả về 27 GV Phi Loan - Khoa CNTT – HUI Ví dụ USE AdventureWorks GO SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE EmailAddress = 'kristina1@adventure.com' 28 GV Phi Loan - Khoa CNTT – HUI Ví dụ CREATE NONCLUSTERED INDEX Contact_EmailAddress ON Person.Contact(EmailAddress) INCLUDE (FirstName,LastName) • Né̂u ta ̣o chỉ mục icovering như trên sẽ tránh được chi phí look up • Lệnh trên vẫn tạo index trên trường EmailAddress, nhưng đồng thời “ký gửi” hai trường FirstName và LastName vào đó. 29 GV Phi Loan - Khoa CNTT – HUI Ví dụ • Key Lookup đã biến mất, bước truy nhập vào bảng dữ liệu đã bị loại bỏ, vì tất cả các trường dữ liệu mà câu lệnh yêu cầu đã được tìm thấy ngay tại index. Điều này cũng có nghĩa là chi phí câu lệnh được giảm đi một nửa 30 GV Phi Loan - Khoa CNTT – HUI Thao tác truy vá̂n • SQL Server sử dụng 3 thao tác chính đẻ̂ tìm dữ liệu: – Table scan: đo ̣c ca ̉ heap – Index scan: đo ̣c toàn bô ̣ mức lá của chỉ mục clustered hay non-clustered – Index seek: định vị hàng dư ̃ liê ̣u thông qua b-tree 31 GV Phi Loan - Khoa CNTT – HUI Bookmark lookup • Đôí vơ ́i các truy vâń không thươ ̀ng xuyên, tìm kié̂m theo bookmark rất phù hợp nhưng với các truy vấn tiêu tó̂n nhiè̂u CPU thì kiẻ̂u tìm kié̂m này không phù hợp. 32 GV Phi Loan - Khoa CNTT – HUI Bookmark lookup SELECT * FROM Production.WorkOrder WHERE ProductID = 757; Tìm các hàng có mã ProductID là 757 và tra ̉ vê ̀tât́ cả cột cho các hàng này. Ba ̉ng WorkOrder có chỉ mục clustered trên cột WorkOrderID 33 GV Phi Loan - Khoa CNTT – HUI Bookmark lookup • Query Optimizer có 2 tùy cho ̣n sau đẻ̂ thực thi: – Option 1: Duyệt toàn bô ̣ chỉ mục clustered đẻ̂ truy xuất đêń tất ca ̉ các cột, sau đó lọc kêt́ qua ̉ đề tìm ra các hàng tho ̉a mãn điều kiê ̣n dò tìm. 34 GV Phi Loan - Khoa CNTT – HUI Bookmark lookup – Option 2: Thực hiện dò tìm chỉ mục trên ba ̉ng chỉ mu ̣c IX_Workload_ProductID đê ̉ tìm ra 11 hàng tho ̉a mãn điều kiê ̣n. Trong quá trình tìm kiếm, optimizer biết được giá trị của WorkOrderID của 11 hàng này (vì cô ̣t khóa chỉ mục clustered đêù nằm ở mư ́c lá của chỉ mu ̣c non-clustered). Sau đó nó có thê ̉ dò tìm theo giá trị của 11 hàng này tư ̀ chỉ mục clustered đẻ̂ tìm các cột khác. 35 GV Phi Loan - Khoa CNTT – HUI Bookmark lookup • Option 2 nha ̉y tư ̀ chỉ mục non-clustered tìm hàng sang chỉ mục clustered đẻ̂ lấy toàn bô ̣ các cột cần thiết cho truy vấn được gọi là bookmark lookup 36 GV Phi Loan - Khoa CNTT – HUI Chỉ mục • Đa số các DBMS đều tạo chỉ mục tự động cho các trường primary key  bảng chỉ mục được tích hợp vào bảng dữ liệu. • Các chỉ mục trên các trường khác được lưu vào bảng chỉ mục. 37 GV Phi Loan - Khoa CNTT – HUI Chỉ mục trong SQL Server • Chỉ mục clustered còn được gọi là chỉ mục sơ cấp ( primary index) hay main index • Unclustered index thường được gọi là secondary index • Thường thì với mỗi bảng chỉ có 1 clustered index và có thể có nhiều unclustered index 38 GV Phi Loan - Khoa CNTT – HUI Index và truy vá̂n tối ưu • Né̂u không có chỉ mục, query optimizer pha ̉i sử dụng phương pháp duyệt ba ̉ng • SQL Server cung cấp công cụ Database Engine Tuning Advisor giúp phân tích môi trường database và cho ̣n index phù hợp. 39 GV Phi Loan - Khoa CNTT – HUI Chỉ mục phư ́c (composite index) • Chi ̉ mục phư ́c có thẻ̂ là clustered hay non- clustered mà cô ̣t khóa của nó gồm nhiêù cô ̣t. • Thực tế chỉ mu ̣c phức rá̂t thông dụng. • Thư ́ tự các cột trong chi ̉ mục phư ́c là quan tro ̣ng. Đẻ̂ sử dụng chỉ mục phư ́c, điêù kiê ̣n dò tìm pha ̉i bao gôm̀ các cột chỉ mục từ trái sang pha ̉i. 40 GV Phi Loan - Khoa CNTT – HUI Chỉ mục phư ́c (composite index) • Ví du ̣: né̂u có 1 chi ̉ mục phức mà khóa bao gôm̀ lastname, firstname, viê ̣c dò tìm theo firstname sẽ không thê ̉ nhanh được nếu dùng chỉ mục, nhưng nếu dò tìm theo lastname, hay lastname và firstname thì chỉ mu ̣c sẽ được sử dụng rất hiệu qua ̉. 41 GV Phi Loan - Khoa CNTT – HUI Chỉ mục và các ràng buộc • Chỉ mục unique clustered được ta ̣o tự đô ̣ng khi các ràng buô ̣c PRIMARY KEY và UNIQUE được ta ̣o. Tuy nhiên vâñ có thẻ̂ ta ̣o chỉ mục unique là non- clustered. • Thực tế ràng buô ̣c unique và chỉ mục unique chỉ là mô ̣t, chỉ câǹ ta ̣o 1 trong loa ̣i. • Sụ khác nhau cơ ba ̉n giữa unique constraint/index và primary key là primary key không cho phép giá trị null, còn unique constraint/index cho phép 1 giá trị null. 42 GV Phi Loan - Khoa CNTT – HUI Lê ̣nh tạo chỉ mục • Ví dụ : Create index idxname ON Customer (FirstName, LastName) 43 GV Phi Loan - Khoa CNTT – HUI Lê ̣nh tạo chỉ mục 44 GV Phi Loan - Khoa CNTT – HUI Fill factor • Khi chỉ mục được ta ̣o hay rebuild , giá trị fill-factor xác định phâǹ trăm không gian trên mõ̂i trang mư ́c lá sẽ chư ́a dữ liệu, đẻ̂ dành phâǹ còn lại trên mõ̂i trang đẻ̂ mở rộng trong tương lai. • Ví dụ: né̂u fill-factor là 80 có nghĩa là 20% của mõ̂i trang mư ́c lá sẽ được đẻ̂ tró̂ng 45 GV Phi Loan - Khoa CNTT – HUI Fill factor • Né̂u khóa chỉ mục clustered là IDENTITY, né̂u xác định fill factor <100 sẽ làm cho các trang mư ́c lá cu ̉a index luôn tró̂ng vì các hàng mơ ́i luôn được vié̂t vào trang cuó̂i. • Né̂u khóa chỉ mục clustered với giá trị bât́ kz, cho ̣n thừa số fill factor <100 sẽ hạn chê ́việc phân trang 46 GV Phi Loan - Khoa CNTT – HUI Page Splits • Chọn giá trị fill-factor phù hợp sẽ ha ̣n ché̂ được tình tra ̣ng phân trang (page split). • Khi 1 hàng mới được thêm vào 1 trang index đã đầy, Database Engine sẽ chuyê ̉n ½ số hàng sang trang mới  viê ̣c phân trang sẽ tạo chõ̂ tró̂ng đẻ̂ thêm hàng mới nhưng sẽ mât́ thời gian thực hiê ̣n và hao tốn tài nguyên. Bảng index sẽ pha ̉i rebuilt đê ̉ phân bố la ̣i dữ liê ̣u. 47 GV Phi Loan - Khoa CNTT – HUI Ví dụ USE AdventureWorks2012; GO CREATE INDEX IX_Emp_OrgaLevel_OrgNode ON HumanResources.Employee (OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON, FILLFACTOR = 80); GO 48 GV Phi Loan - Khoa CNTT – HUI Phân mảnh (Fragmentation) • Khi các trang index mà thứ tự logic cuả các giá trị khóa không còn trùng với thứ tự vật lý trong file dữ liệu được gọi là phân mảnh. • Khi mới đuợc tạo, index chưa bi ̣ phân mảnh, sau 1 thời gian, do dữ liệu bị sửa đô ̉i, index trở nên phân mảnh. 49 GV Phi Loan - Khoa CNTT – HUI Kiểm tra tình trạng phân mảnh • Cách 1: Mở property của index câǹ kiẻ̂m tra, chọn trang Fragmentation • Cách 2: – Dùng hàm hê ̣ thó̂ng sys.dm_db_index_physical_stats sys.dm_db_index_physical_stats ( { database_id | NULL | 0 | DEFAULT } , { object_id | NULL | 0 | DEFAULT } , { index_id | NULL | 0 | -1 | DEFAULT } , { partition_number | NULL | 0 | DEFAULT } , { mode | NULL | DEFAULT } ) 50 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ Kiê ̉m tra tình trạng phân mảnh USE AdventureWorks2008; GO SELECT a.index_id, name, avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), OBJECT_ID(N'HumanResources.Employee'), NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; GO 51 GV Phi Loan - Khoa CNTT – HUI Chỉ tiêu kỹ thuật về phân mảnh • Né̂u mức độ phân mảnh >30% nên rebuild la ̣i index • Nè̂u mức phân mảnh <10% :index chưa bị phân mảnh đáng kẻ̂ 52 GV Phi Loan - Khoa CNTT – HUI Reorganize or rebuild an index • Dùng Management Studio • Dùng T-SQL 53 GV Phi Loan - Khoa CNTT – HUI Reorganize an index • Dùng Management Studio – Đẻ̂ reorganize 1 index: nhấp pha ̉i ta ̣i inddex, chọn lệnh Reorganize – Đẻ̂ reorganize tất ca ̉ index của 1 ba ̉ng: nhấp pha ̉i ta ̣i folder indexes, chọn lê ̣nh Reorganize All 54 GV Phi Loan - Khoa CNTT – HUI Reorganize indexes • Dùng T-SQL USE AdventureWorks2008; GO -- Reorganize an index ALTER INDEX IX_Emp_OrgLevel_OrgNode ON HumanResources.Employee REORGANIZE ; GO -- Reorganize all indexes on a table. ALTER INDEX ALL ON HumanResources.Employee REORGANIZE ; GO 55 GV Phi Loan - Khoa CNTT – HUI Rebuild an index • Dùng Management Studio – Đẻ̂ rebuild 1 index: nhấp pha ̉i ta ̣i inddex, chọn lệnh Rebuild – Đẻ̂ rebuild tất ca ̉ index của 1 ba ̉ng: nhấp pha ̉i ta ̣i folder indexes, chọn lê ̣nh Rebuild All 56 GV Phi Loan - Khoa CNTT – HUI Rebuild indexes • Dùng T-SQL USE AdventureWorks2008; GO -- Rebuild an index ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee REBUILD; GO -- Reorganize all indexes on a table. ALTER INDEX ALL ON Production.Product REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON); GO 57 GV Phi Loan - Khoa CNTT – HUI Theo dõi các chỉ mục đang thiêú • Mõ̂i lâǹ query optimizer biên dịch 1 lệnh T-SQL, SQL Server 2012 theo dõi khoa ̉ng 500 chỉ mục mơ ́i nhất hiện có mà optimizer có thẻ̂ đã dùng đẻ̂ thực thi truy vâń hiệu quả hơn. – Nhờ vào 3 DMV (dynamic management view) và 1 hàm DMF (dynamic management function) 58 GV Phi Loan - Khoa CNTT – HUI Theo dõi các chỉ mục đang thiêú 59 GV Phi Loan - Khoa CNTT – HUI Ví dụ • Lệnh sau liệt kê các index bị thié̂u có thẻ̂ có lợi cho các T-SQL batches đã được dùng ( đã gửi vê ̀cho query optimizer) kẻ̂ tư ̀ lần cuó̂i dịch vụ SQL Server được khởi động lại: 60 GV Phi Loan - Khoa CNTT – HUI Ví dụ 61 GV Phi Loan - Khoa CNTT – HUI Duyệt lại các index không dùng • Có như ̃ng chỉ mục được định nghĩa cho các ba ̉ng nhưng la ̣i không bao giờ được dùng đêń. • Môĩ khi 1 ba ̉ng được chèn, câ ̣p nhâ ̣t hay xóa, thì các chỉ mu ̣c liên quan đến ba ̉ng cũng sẽ được ba ̉o trì đê ̉ pha ̉n ánh các thay đỏ̂i này. – Né̂u quá nhiè̂u index mà query optimizer sẽ không dùng đến làm ảnh hưởng đến việc thực thi. • Duyệt có định kz đẻ̂ tìm các index không được dùng đêń. 62 GV Phi Loan - Khoa CNTT – HUI Duyệt lại các index không dùng • Không nên xóa các chỉ mục không dùng đêń mà chi ̉ nên disable. • Nêú sau này cần dùng đêń chỉ cần rebuild la ̣i index đó. • Ví dụ: lê ̣nh sau chỉ ra số thao tác được thực thi cùng với index, đôǹg thời chỉ ra việc sử dụng index so với chi phí cu ̉a index đó. 63 GV Phi Loan - Khoa CNTT – HUI Ví dụ 64 GV Phi Loan - Khoa CNTT – HUI Index with included column • Chi ̉ mục có cột không khoá included có thẻ̂ ca ̉i thiê ̣n đáng kê ̉ tốc đô ̣ thực thi truy vấn khi tất ca ̉ cột trong truy vấn đêù có mă ̣t trong chỉ mục. Query optimizer có thê ̉ định vị tất ca ̉ giá trị cô ̣t ngay bên trong truy vấn, không cần truy vâń đêń ba ̉ng dư ̃ liệu nư ̃a  số thao tác I/O gia ̉m. 65 GV Phi Loan - Khoa CNTT – HUI Index with included column • Chỉ mục nonclustered bị hạn ché̂ về kích cỡ: – Số cô ̣t khóa tối đa là 16 – Kích cỡ khóa chỉ mục tó̂i đa là 900 bytes 66 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ về giơ ́i hạn kích cơ ̃ cu ̉a chi ̉ mục • Gia ̉ sử muó̂n ta ̣o chỉ mục cho 3 cột sau trong ba ̉ng Document của DB AdventureWorks – Title nvarchar(50) – Revision nchar(5) – FileName nvarchar(400) 67 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ về giơ ́i hạn kích cơ ̃ cu ̉a chi ̉ mục • Chỉ mục chứa 3 cột này vượt quá 900 byte. Đẻ̂ khắc phục hạn chế này nên ta ̣o chỉ mục có trường không khoá được INCLUDE vào. CREATE INDEX IX_Document_Title ON Production.Document (Title, Revision) INCLUDE (FileName); 68 GV Phi Loan - Khoa CNTT – HUI Ví dụ về thiết kế chỉ mục • Giả sử có truy vâń sau: USE AdventureWorks; GO SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode FROM Person.Address WHERE PostalCode BETWEEN N'98000' and N'99999'; Hãy thié̂t kế chỉ mục hỗ trợ truy vâń này?? 69 GV Phi Loan - Khoa CNTT – HUI Ví dụ về thiết kế chỉ mục CREATE INDEX IX_Address_PostalCode ON Person.Address (PostalCode) INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); 70 GV Phi Loan - Khoa CNTT – HUI Bất lợi của index • Chiếm không gian đĩa • Nếu index lớn thì các trang index cần được đọc vào bộ nhớ tó̂n chi phí cho thao tác vào ra (I/O) • Index cần được bảo trì (maintenance): các chỉ mục phải được sửa đổi cùng với sự thay đổi của dữ liệu 71 GV Phi Loan - Khoa CNTT – HUI Tính toán không gian đĩa • Khi index được ta ̣o, cần dùng không gian đĩa: – Lưu trư ̃ cấu trúc cũ và mới. Cấu trúc cũ vẫn chưa bị hu ̉y bo ̉ chừng nào transaction ta ̣o index chưa được commit. – Không gian ta ̣m dùng cho thao tác sắp xếp 72 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index • Gia ̉ sử trước khi ta ̣o index, một CSDL thỏa mãn các điè̂u kiện sau: – Bảng chư ́a 1 triệu row, mỗi row chié̂m 200 byte. – Chỉ mục nonclustered A chư ́a 1 triệu row. Mỗi row dài 50 byte. – Chi ̉ mục nonclustered B chứa 1 triệu row. Mỗi row dài 80 byte. – Bô ̣ nhớ dành cho việc ta ̣o index là 2 MB. – Giá trị fill factor là 80 dùng cho tất cả index cũ và mơ ́i  Các trang đâỳ 80 %. 73 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác định kích cơ ̃ của cấu trúc nguò̂n • Xác định kích cơ ̃ của cấu trúc index • Xác định không gian tạm dùng đẻ̂ sắp xé̂p 74 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác đi ̣nh kích cỡ cu ̉a cá̂u trúc nguồn – Heap: 1 million * 200 bytes ~ 200 MB – Nonclustered index A: 1 million * 50 bytes / 80% ~ 63 MB – Nonclustered index B: 1 million * 80 bytes / 80% ~ 100 MB  Tỏ̂ng kích cỡ cho cấu trúc hiện có là 363 MB 75 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác đi ̣nh kích cỡ cu ̉a cá̂u trúc index – Clustered index: 1 million * 200 bytes / 80% ~ 250 MB – Nonclustered index A: 1 million * (50 – 8 + 24) bytes / 80% ~ 83 MB – Nonclustered index B: 1 million * (80 – 8 + 24) bytes / 80% ~ 120 MB Tô ̉ng kích cỡ cu ̉a cấu trúc mới là 453 MB Tô ̉ng không gian đĩa cho cả cấu trúc nguồn và chi ̉ mục là 816 MB (363 + 453). 76 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác đi ̣nh không gian tạm dùng để sắp xêṕ – Khi SORT_IN_TEMPDB được đă ̣t là ON, tempdb pha ̉i có đủ không gian đĩa dành cho chỉ mục lơ ́n nhất (1 million * 200 bytes ~ 200 MB). Fill factor không được xét đêń trong lúc sắp xếp. Không gian phu ̣ dành riêng cho tempdb là 2 MB. Tỏ̂ng không gian phụ là 202 MB. 77 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác đi ̣nh không gian tạm dùng để sắp xêṕ – Khi SORT_IN_TEMPDB được đă ̣t là OFF (default), 250 MB không gian đĩa đã được dùng trong bước 2 sẽ được dùng sắp xêṕ. Không gian phu ̣ dành riêng cho tempdb là 2 MB.  Tô ̉ng không gian phu ̣ là 2 MB. 78 GV Phi Loan - Khoa CNTT – HUI Ví du ̣ tính toán không gian đĩa dùng cho index (Offline Index Operation) • Xác định kích cơ ̃ của cấu trúc nguò̂n – Heap: 1 million * 200 bytes ~ 200 MB – Nonclustered index A: 1 million * 50 bytes / 80% ~ 63 MB – Nonclustered index B: 1 million * 80 bytes / 80% ~ 100 MB  Tỏ̂ng kích cỡ cho cấu trúc hiện có là 363 MB 79

Các file đính kèm theo tài liệu này:

  • pdfchuong_7_ktdbms_0488.pdf