1. Định nghĩa- Statistics (thống kê): được lập trên một cột của một bảng- Quá trình sắp xếp (tăng hoặc giảm), gom nhóm các ô có cùng giá trị (bao gồm đếm chúng)- Statistics giúp SQL lựa chọn phương án thực hiện truy vấn tối ưu nhất
Header Density Vector Histogram
Tên Statistics TGian Update Số dòng trong bảng Số dòng được thống kê Số giá trị
1. Định nghĩa- Statistics (thống kê): được lập trên một cột của một bảng- Quá trình sắp xếp (tăng hoặc giảm), gom nhóm các ô có cùng giá trị (bao gồm đếm chúng)- Statistics giúp SQL lựa chọn phương án thực hiện truy vấn tối ưu nhất
Tần số lặp lại của mỗi giá trị
Cột lập thống kê
1. Định nghĩa- Statistics (thống kê): được lập trên một cột của một bảng- Quá trình sắp xếp (tăng hoặc giảm), gom nhóm các ô có cùng giá trị (bao gồm đếm chúng)- Statistics giúp SQL lựa chọn phương án thực hiện truy vấn tối ưu nhất
Giá trị khóa Số dòng nằm trong khoảng giá trị Số dòng cùng giá trị Số giá trị
1. Định nghĩa- Statistics (thống kê): được lập trên một cột của một bảng- Quá trình sắp xếp (tăng hoặc giảm), gom nhóm các ô có cùng giá trị (bao gồm đếm chúng)- Statistics giúp SQL lựa chọn phương án thực hiện truy vấn tối ưu nhất
1. Tạo Statistic (Statistics được tạo ra khi nào ???)* Một Statistic được tạo đồng thời khi Index được khởi tạo
* Câu truy vấn tự phát sinh Statistic
* Tạo thủ công bằng Transct-SQL
- Tùy chọn Auto Create Statistics của Database là true- Khi Statistic không đủ thông tin đáp ứng quá trình truy vấn
CREATE STATISTICS STATS_SINHVIEN_MALOPQLON SINHVIEN(MaLopQL)
CREATE STATISTICS [Tên Statistic]ON [Tên bảng](Tên cột)
Demo
Demo
Demo
* Tạo Statistics
* Cập nhật Statistics
CREATE STATISTICS STA_SV_TENSVON SINHVIEN(TenSV)
* Xem thông tin StatisticsDBCC SHOW_STATISTICS (SINHVIEN,STA_SV_TENSV)
* Xóa StatisticsDROP STATISTICS SINHVIEN.STA_SV_TENSV
UPDATE STATISTICS SINHVIEN- Khi nào Statistics được cập nhật (làm rõ ở phần sau)
1. Tạo, xóa, cập nhật Statistics
* Liệt kê các StatisticsEXEC sp_helpstats SINHVIEN, 'ALL'
- Index là một cấu trúc dữ liệu được lưu trữ trên ổ cứng tương đương với table- Index chứa các key được xây dựng từ một hay nhiều cột trong bảng được lưu thành câu trúc dạng B-Tree cho phép việc tìm kiếm một hay tập hợp các khóa nhanh chóng
1. Clustered Index* Clustered Index
- Clustered Index sắp xếp và lưu trữ dữ liệu ở tầng vật lý (ngay trên bảng)- Clustered Index được tạo mặc định cho cột khóa chính trong bảng
CLUSTERED INDEX PK_SINHVIENON SINHVIEN(MaSV)
* Non-Clustered IndexDemo CREATE CLUSTERED INDEX [IndexName]
ON [TableName]([ColumnName])
1. Non-Clustered Index* Non-Clustered Index
- Non-Clustered Index được lưu tách biệt với dữ liệu thật trong bảng- Mỗi chỉ mục có con trỏ, trỏ đến dữ liệu thật trong bảng
CREATE NONCLUSTERED INDEX [IndexName]ON [TableName](ColumnName)
SV00004 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00006 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00008 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00007 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00009 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00002 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00010 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00001 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00005 con trỏ tới dòng dữ liệu tương ứng trong bảng
SV00003 con trỏ tới dòng dữ liệu tương ứng trong bảng
Demo
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấn
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Kim%'
+ Lần 1:
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Ki%'
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'K%'
+ Lần 2:
+ Lần 3:
? Statistics được sử dùng như thế nào ?
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Tạo IndexCREATE INDEX Member_LNameON member(Lastname, FirstName, MiddleInitial)
* Truy vấnSELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Kim%'
+ Câu truy vấn phát sinh Statistics
StatisticsName: _WA_Sys_00000003_0CBAE877
+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
Không có Statistics Có Statistic trên FirstName
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
*member_ident: Clustered Index mặc định của Primary Key
Theo thống kê có 1.96078 dòng trả về(Estimated Number of Rows)
Logical reads: 144
Logical reads: 46
Demo
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấnSELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Ki%'
SELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWITH(INDEX(member_ident))WHERE m.FirstName LIKE 'Ki%'+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
Logical reads: 82 Logical reads: 144
Estimated Number of Rows : 19.6078 dòngEstimated Number of Rows : 19.6078 dòng
Chi phí thực hiện truy vấn
Thấp Cao
Demo
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấnSELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'K%'
SELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWITH(INDEX(Member_LName))WHERE m.FirstName LIKE 'K%'+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144 Logical reads: 935
Estimated Number of Rows : 431,373 dòngEstimated Number of Rows : 431,373 dòng
Chi phí thực hiện truy vấn
Thấp Cao
Demo
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
? Khi nào Statistics được cập nhật ?* Update dữ liệuUPDATE memberSET firstname = 'Kimberly'WHERE member_no >= 1 AND member_no <= 1000
* Truy vấnSELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWITH (INDEX (member_ident))WHERE m.FirstName LIKE 'Kim%'
SELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Kim%'
Update 1.000 dòng = 10% tổng số dòng Tổng số dòng: 10.000
+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144 Logical reads: 2072
Estimated Number of Rows : 1.96078 dòng
Actual Number of Rows: 1001
Demo
UPDATE memberSET firstname = 'Kimberly'WHERE member_no > 1000 AND member_no <= 2500
DatabaseName: CreditTable: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Update dữ liệuSố dòng Updaet1.500 dòng = 15% tổng số dòng
Số dòng Update:1000 + 1500 = 2500 dòng> 20% tổng số dòng
* Truy vấnSELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWITH (INDEX (member_ident))WHERE m.FirstName LIKE 'Kim%'
SELECT m.LastName, m.FirstName,m.MiddleInitial, m.Phone_no, m.CityFROM dbo.Member AS mWHERE m.FirstName LIKE 'Kim%'
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144 Logical reads: 144
Estimated Number of Rows : 2509,8 dòng
Actual Number of Rows: 2501
Demo
- Statistics giúp SQL lựa chọn phương án thực hiện truy vấn tối ưu- Tùy chọn Auto Create Statistics cho db là true- Không nhất thiết tạo Index cho thuộc tính không thường xuyên truy vấn - Cần có kế hoạch truy vấn rõ ràng để quản lý Statistics- Update Statistics bằng Transact-SQL để đảm bảo truy vấn luôn tối ưu
• technet.microsoft.com• msdn.microsoft.com• sqlskills.com• stackoverflow.com• sqlviet.com• bigdata.com.vnVideo Demo: http://social.technet.microsoft.com/Search/en-US/sqlserver?query=statistics&ac=4#refinementChanges=300&pageNumber=1&showMore=trueSample Database and Script: http://www.sqlskills.com/sql-server-resources/sql-server-demos/
CREATE CLUSTERED INDEX
CREATE NONCLUSTERED INDEX
STATISTICS TẠO ĐỒNG THỜI VỚI INDEX
CÂU TRUY VẤN PHÁT SINH STATISTICS
TẠO STATISTICS BẰNG TRANSCT-SQL