Bài thực hành 1: Chỉ mục trong SQL Server

Similar documents
TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

CẤU TRÚC DỮ LIỆU NÂNG CAO

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

BELGIUM ONLINE APPOINTMENT

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Tình huống 1: PPPoE với Username và Password

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

Hướng dẫn cài đặt FPT

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

Tài liệu hướng dẫn: Stored Procedure

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

Tạo Project với MPLAB

Bài thực hành số 2 QUYỀN và ROLE

Chương 5. Network Layer 19/09/2016 1

Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

Nhấn nút New để tạo 1 biến mới Trang 17

Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ. Những hỗ trợ tiên tiến khác của SQL. Đỗ Thanh Nghị

SIEMENS INDUSTRIAL NETWORKS

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

SIMULATE AND CONTROL ROBOT

Mô hình dữ liệu quan hệ (Relational data model)

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

BẢO MẬT TRONG SQL SERVER

STACK và QUEUE. Lấy STACK

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

Cập nhật ResultSet trong JDBC

LÂ P TRI NH WEB ASP.NET

PHÁT TRIỂN ỨNG DỤNG WEB

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

Entity Framework (EF)

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

I. Hướng Dẫn Đăng Nhập:

Môn Học: Cơ Sở Dữ Liệu 2. Chương 3 LẤY DỮ LIỆU TỪ NHIỀU NGUỒN

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

Dọn "rác" Windows 7 vào dịp cuối năm

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

Tìm hiểu Group Policy Object và các ví dụ

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

NHÚNG. Vi ñiều khiển BM Kỹ Thuật ðiện Tử - ðh Bách Khoa TP.HCM 2

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

Bài tập lớn số 1. Giả lập bộ định thời

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

MỤC LỤC. Giáo trình Thiết kế web Trang 1

B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có 3 thư mục con:

Google Search Engine. 12/24/2014 Google Search Engine 1

BÀI LAB ĐỔI TÊN DOMAIN

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

TỔNG QUAN VỀ.NET VÀ C#

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

dụng một chính sách, điều này giúp dễ dàng quản lý và cung cấp tính năng Load Balancing (cân bằng tải) phục vụ tốt hơn các yêu cầu của tổ chức.

Qu n ả tr h ố g t p ậ tin

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

Mạng máy tính - Computer Network: Hệ. Giao thức - Protocol:

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

Parallels Cloud Server 6.0

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT. Bài giảng 3. Trang1. Khoa Khoa Học Và Kỹ Thuật Máy Tính

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

NỘI DUNG ÔN TẬP MÔN HỆ CƠ SỞ DỮ LIỆU

1 Bước 1: Test thử kit LaunchPad.

Đa ngôn ngữ (Internationalization) trong Servlet

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

Bài 10: Cấu trúc dữ liệu

Lecture 12. Trees (1/2) Nội dung bài học:

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

Time Picker trong Android

LAB IP SLA Bài 1. Bùi Quốc Kỳ ***

KIẾN TRÚC MÁY TÍNH. Giảng viên: ThS. Phan Thanh Toàn. v

Bài 7: Các cấu trúc điều khiển

GV: Phạm Đình Sắc or

MA NG MA Y TI NH (Computer Networks)

Các kiểu định địa chỉ họ MSC-51

LINQ TO SQL & ASP.NET

HƯỚNG DẪN SỬ DỤNG NHANH MINDJET MIND MANAGER

2.4. GIAO THỨC MQTT Các khái niệm cơ bản MQTT được phát triển bởi IBM và Eurotech, phiên bản mới nhất là MQTT 3.1 MQTT (Giao vận tầm xa) là

biến Global có thể được áp dụng cho tất cả các extension trong tất cả các context trong Dialplan.

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

Hệ điều hành Bài tập tuần 7_ Chúng ta làm quen một số lệnh thao tác với hệ thống file trong Linux :

Tối ưu Server để tăng tốc website bằng mod_pagespeed

- Chạy file cài đặt: kerio-kwf-whql win32.exe. Hộp thoại Choose Setup Language chọn English (United States), chọn

Bài thực hành số 1 QUẢN LÝ NGƯỜI DÙNG

Transcription:

Bài thực hành 1: Chỉ mục trong SQL Server Mô tả Mục đích của bài thực hành: Giúp cho người học nắm được kiến thức cơ bản về chỉ mục trong SQL Server. Cách tạo, huỷ bỏ chỉ mục. Hiệu quả của việc tạo chỉ mục trong truy vấn. Sử dụng Database Engine Tuning Advisor. Nội dung bài thực hành: Phần 1 Tổng quan Phần 2 Các loại chỉ mục Phần 3 Cú pháp Phần 4 Thực hành Tài liệu tham khảo Yêu cầu Đọc và hiểu lý thuyết liên quan. Thực hành. Phần 1 - Tổng quan Chỉ mục trong SQL Server là một cấu trúc dữ liệu được lưu trữ trên ổ cứng tương ứng với một table hoặc view nhằm mục đích tăng tốc độ việc truy xuất dữ liệu từ table hoặc view đó. Một chỉ mục được xây dựng từ một hoặc nhiều cột trong table hoặc view. Chỉ mục được lưu trong một cấu trúc dạng B-Tree và cho phép SQL Server tìm bản ghi hoặc các tập hợp bản ghi tương ứng một cách nhanh chóng và hiệu quả [1]. Phần 2 - Các loại chỉ mục SQL Server hỗ trợ 2 loại chỉ mục chính [1, 2]: Clustered Index: dữ liệu được lưu trữ và sắp xếp vật lý trong table hoặc view dựa trên thuộc tính lập chỉ mục. Mỗi table hoặc view chỉ có duy nhất một Clustered Index. Non-Clustered Index: Chỉ mục logic, dữ liệu thật sự không được sắp xếp vật lý theo thuộc tính lập chỉ mục. Cả Clustered Index và Non-Clustered Index đều có thể là unique, có nghĩa là không có hai dòng nào có sự trùng lặp giá trị trong các cột lập chỉ mục. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 1

Chú ý: Chỉ mục sẽ được tạo tự động khi các ràng buộc PRIMARY KEY và UNIQUE được định nghĩa trên các cột của bảng. Số lượng chỉ mục tối đa trong một bảng [3]: Loại chỉ mục SQL Server 2000 SQL Server 2005 SQL Server 2008 SQL Server 2012 Clustered Index 1 1 1 1 Non-clustered Index 249 249 999 999 Ngoài ra, còn có các loại chỉ mục khác: Unique: Không có 2 dòng nào trong chỉ mục có giá trị trùng nhau. Do đó, dữ liệu trong table hoặc view cũng là duy nhất trên các cột lập chỉ mục. Index with included columns: Nonclustered index có thể được mở rộng chứa thêm những cột không phải là khoá (tối đa là 16 cột). Full-text, Spatial, Filtered, XML index. Học viên tham khảo thêm tại [4]. Phần 3 - Cú pháp CREATE [ UNIQUE ] [ CLUSTERED NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC DESC ] [,...n ] ) [ INCLUDE ( column_name [,...n ] ) ] [ WHERE <filter_predicate> ] [ WITH ( <relational_index_option> [,...n ] ) ] [ ON { partition_scheme_name ( column_name ) filegroup_name default } ] [ FILESTREAM_ON {filestream_filegroup_name partition_scheme_name "NULL"}] [ ; ] <object> ::= { [ database_name. [ schema_name ]. schema_name. ] table_or_view_name } <relational_index_option> ::= { PAD_INDEX = { ON OFF } FILLFACTOR = fillfactor Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 2

} SORT_IN_TEMPDB = { ON OFF } IGNORE_DUP_KEY = { ON OFF } STATISTICS_NORECOMPUTE = { ON OFF } DROP_EXISTING = { ON OFF } ONLINE = { ON OFF } ALLOW_ROW_LOCKS = { ON OFF } ALLOW_PAGE_LOCKS = { ON OFF } MAXDOP = max_degree_of_parallelism DATA_COMPRESSION = { NONE ROW PAGE} [ ON PARTITIONS ( { <partition_number_expression> <range> } [,...n ] ) ] Học viên tự tham khảo ý nghĩa các tham số tại [5]. Phần 4 - Thực hành 4.1. Chuẩn bị dữ liệu - Tạo database tên là Test DB và bảng Sales gồm các cột ID, ProductCode, Price, DateTransaction như sau: USE master CREATE DATABASE TestDB USE TestDB CREATE TABLE Sales ( ID INT IDENTITY(1,1), ProductCode VARCHAR(20), Price FLOAT(53), DateTransaction DATETIME ); - Sau đó, tạo một stores procedure để insert 200.000 records vào bảng Sales. Với số lượng lớn records này, chúng ta sẽ thấy rõ hiệu quả của việc tạo chỉ mục. CREATE PROCEDURE InsertIntoSales AS BEGIN DECLARE @PC VARCHAR(20)='A12CB' Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 3

DECLARE @Price INT = 50 DECLARE @COUNT INT = 0 WHILE @COUNT<200000 BEGIN SET @PC=@PC+CAST(@COUNT AS VARCHAR(20)) SET @Price=@Price+@COUNT INSERT INTO Sales VALUES (@PC,@Price,GETDATE()) SET @PC='A12CB' SET @Price=50 SET @COUNT+=1 END END EXEC InsertIntoSales 4.2. Tạo index - Tạo một chỉ mục đơn trên cột có tên là IDIndex trên cột ID của bảng Sales: CREATE INDEX idx_id ON Sales (ID); - Nếu muốn chỉ mục sắp xếp giảm dần, chúng ta thêm từ khoá DESC: CREATE INDEX idx_id ON Sales(ID DESC); - Tạo chỉ mục unique: không có hai dòng bất kì của bảng có giá trị trùng nhau ở cột lập chỉ mục. CREATE UNIQUE INDEX idx_id_unique ON Sales (ID); - Tạo chỉ mục trên nhiều cột: CREATE INDEX idx_sales_composite ON Sales (ID, ProductCode); - Tạo chỉ mục có điều kiện: CREATE INDEX idx_price ON Sales (Price) WHERE Price > 100000; 4.3. Xoá chỉ mục Xoá chỉ mục bằng lệnh DROP. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 4

Cú pháp: DROP INDEX index_name ON [ database_name. [ schema_name ]. schema_name. ] table_or_view_name Ví dụ: DROP INDEX idx_sales_composite on Sales; DROP INDEX idx_id_unique on Sales; DROP INDEX idx_price on Sales; 4.4. CREATE INDEX Options 4.4.1 FILLFACTOR Khi một index được tạo ra hoặc tổ chức lại, giá trị fill-factor sẽ xác định phần trăm dung lượng ở mỗi nốt lá sẽ chứa dữ liệu, phần còn lại là không gian trống. Ví dụ, fill-factor là 80 nghĩa là 20% nốt lá sẽ trống, dùng để mở rộng chỉ mục khi dữ liệu được thêm vào bảng. Ví dụ: USE TestDB IF EXISTS (SELECT name FROM sysindexes WHERE name = 'idx_id') DROP INDEX Sales.idx_ID USE TestDB CREATE NONCLUSTERED INDEX idx_id 4.4.2 PAD_INDEX ON Sales(ID) WITH FILLFACTOR = 80; Giá trị mặc định của pad_index là OFF. Khi bật lên ON, phần trăm không gian trống xác định bởi fill-factor sẽ được áp dụng cho các nốt trung gian của chỉ mục. Lưu ý, pad_index chỉ có tác dụng khi có khai báo fill-factor. Ví dụ: USE TestDB IF EXISTS (SELECT name FROM sysindexes WHERE name = 'idx_id') DROP INDEX Sales.idx_ID Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 5

USE TestDB CREATE INDEX idx_id ON Sales(ID) WITH PAD_INDEX, FILLFACTOR = 10 ; 4.5. Hiệu quả của chỉ mục Chúng ta xét ví dụ dưới đây để thấy hiệu quả của việc sử dụng chỉ mục trong SQL Server. 4.5.1 Không có chỉ mục - Xoá tất cả các index đã tạo trên table Sales. - Nhấn tổ hợp phím Control+M để thêm Execution Plan trong kết quả. Chạy câu truy vấn dưới đây: SET STATISTICS IO ON SELECT * FROM Sales WHERE ID=189923; - Kết quả: ID ProductCode Price DateTransaction ----------- ---------------- ---------- ----------------------- 189923 A12CB189922 189972 2013-11-12 11:47:27.747 (1 row(s) affected) Table 'Sales'. Scan count 1, logical reads 1129, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. (1 row(s) affected) - Execution plan trong cửa sổ kết quả cho chúng ta thấy các bản ghi được truy xuất thông qua việc quét bảng Sales (table scan) và số lần đọc dữ liệu luận lý là 1129. 4.5.2 Clustered index - Tạo một clustered index trên cột ID của bảng Sales. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 6

CREATE CLUSTERED INDEX idx_cl_id ON SALES(ID); - Chạy lại câu truy vấn trên. SET STATISTICS IO ON SELECT * FROM Sales WHERE ID=189923; - Kết quả: ID ProductCode Price DateTransaction ----------- ---------------- ---------- ----------------------- 189923 A12CB189922 189972 2013-11-12 11:47:27.747 (1 row(s) affected) Table 'Sales'. Scan count 1, logical reads 3, physical reads 0, readahead reads 0, lob logical reads 0, lob physical reads 0, lob readahead reads 0. (1 row(s) affected) (1 row(s) affected) - Execution plan trong cửa sổ kết quả cho thấy các bản ghi được truy xuất thông qua việc tìm kiếm trên chỉ mục và số lần đọc dữ liệu luận lý là 3, ít hơn trường hợp không có index rất nhiều. - Thử lại với câu truy vấn sau: SET STATISTICS IO ON SELECT * FROM Sales WHERE ID + 2 = 189923; 4.5.3 Non Clustered index - Bảng Sales đã có một clustered index trên cột ID. Ta kiểm tra kết quả chạy câu truy vấn sau: SET STATISTICS IO ON SELECT * FROM Sales WHERE ProductCode like 'A12CB908%' order by Price; - Kết quả: Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 7

(111 row(s) affected) Table 'Sales'. Scan count 1, logical reads 1130, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. (1 row(s) affected) - Tạo một non clustered index trên cột Product Price: CREATE NONCLUSTERED INDEX idx_ncl_pc ON SALES(ProductCode); - Chạy lại câu truy vấn ở trên để thấy hiệu quả. - Xoá clustered index idx_cl_id và kiểm tra lại kết quả trong trường hợp này. 4.6. Sử dụng Database Engine Tuning Advisor Trong phần này, chúng ta sẽ sử dụng Database Engine Tuning Advisor (DTA) để biết nên tạo chỉ mục trên cột nào nhằm tối ưu câu truy vấn. Bước 1: Xoá tất cả các chỉ mục đã được tạo trên bảng Sales. Bước 2: Mở SQL Server Profiler Start All Programs MS SQL Server 2008 Performance Tools SQL Server Profiler. Chọn File New Trace Kết nối tới server. Cửa sổ Trace Properties xuất hiện. - General Tab: Điền thông tin trace name (ví dụ Trace 1 ), chọn Save to file và xác định đường dẫn để lưu file này. - Selection tab: cung cấp sự kiện mà chúng ta muốn ghi nhập kí. Ở đây chỉ chọn T- SQL và bỏ chọn tất cả những sự kiện còn lại. - Nhấn Run và bắt đầu theo vết. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 8

Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 9

Bước 3: Quay lại SQL Sserver Management Studio, chạy câu truy vấn sau: SELECT * FROM Sales WHERE ID=189923; Mở Profiler, chúng ta thấy câu truy vấn SQL đã được ghi nhận. Nhấn nút Stop và lưu lại. Bước 4: Mở Database Engine Tuning Advisor. Start All Programs MS SQL Server 2008 Performance Tools Database Engine Tuning Advisor. Kết nối đến server. Trong General tab, chọn mục File trong khung Workload và mở file Trace1.trc mà chúng ta vừa ghi nhận được từ Profiler. Trong mục Database for workload analysis chọn CSDL TestDB và trong mục Select databases and tables to tune, chọn TestDB và chọn bảng Sales. Trong Tuning Option tab thì giữ nguyên lựa chọn mặc định (Indexes). Nhấn nút Start Analysis và DTA sẽ bắt đầu công việc. Bước 5: Khi công việc hoàn thành, chúng ta sẽ thấy có 3 tabs: progress, recommendations và reports. Mở tab Recommendations: DTA đề nghị chúng ta cần tạo clustered index trên cột ID của bảng Sales và cũng cho biết ước lượng kích thước của chỉ mục. Click vào Definition, DTA còn cho chúng ta câu lệnh truy vấn T-SQL mà bạn cần chạy để tạo chỉ mục này. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 10

Chúng ta sẽ tạo chỉ mục clusterd trên cột ID của bảng Sales như lời khuyên của DTA. Bước 6: Làm tương tự các bước như trên với câu truy vấn sau: SELECT * FROM Sales WHERE ProductCode like 'A12CB908%' order by Price; Chúng ta sẽ nhận được 2 lời khuyên: - Tạo một thống kê (statistics). Học viên tham khảo thêm tại [7]. - Tạo một non-clustered index trên cột ProductCode và Price. Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 11

Tài liệu tham khảo [1] http://technet.microsoft.com/en-us/library/ms190457(v=sql.105).aspx (2013) [2] https://www.simple-talk.com/sql/learn-sql-server/sql-server-index-basics/ (2013) [3] http://msdn.microsoft.com/en-us/library/ms143432(v=sql.100).aspx (2013) [4] http://technet.microsoft.com/en-us/library/ms175049(v=sql.105).aspx (2013) [5] http://technet.microsoft.com/en-us/library/ms188783.aspx (2013) [6] http://www.codeproject.com/articles/190263/indexes-in-ms-sql-server (2013) [7] http://msdn.microsoft.com/en-us/library/ms190397.aspx (2013) Khoa Khoa học & Kỹ thuật Máy tính Đại học Bách Khoa TP.HCM 12