(1) Giới thiệu về thống kê cho các ngành khoa học xã hội_Bài giảng 1: Giới th...
Management Statistics
1.
2.
3. 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
4. 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 Statistics
TGian Update
Số dòng trong bảng
Số dòng được thống kê
Số giá trị
5. 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ê
6. 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ị
7. 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
Demo
* Câu truy vấn tự phát sinh
Statistic Auto Create Statistics của Database là true
- Tùy chọn
Demo
- Khi Statistic không đủ thông tin đáp ứng quá trình truy vấn
* Tạo thủ công bằng Transct-SQL
Demo
CREATE STATISTICS STATS_SINHVIEN_MALOPQL
ON SINHVIEN(MaLopQL)
CREATE STATISTICS [Tên Statistic]
ON [Tên bảng](Tên cột)
8. 1. Tạo, xóa, cập nhật Statistics
* Tạo Statistics
CREATE STATISTICS STA_SV_TENSV
ON SINHVIEN(TenSV)
* Xem thông tin Statistics
DBCC SHOW_STATISTICS
(SINHVIEN,STA_SV_TENSV)
* Xóa Statistics
DROP STATISTICS SINHVIEN.STA_SV_TENSV
* Liệt kê các Statistics
EXEC sp_helpstats SINHVIEN, 'ALL'
* Cập nhật Statistics
UPDATE STATISTICS SINHVIEN
- Khi nào Statistics được cập nhật (làm rõ ở phần sau)
9. - 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
Demo
CLUSTERED INDEX PK_SINHVIEN
ON SINHVIEN(MaSV)
* Non-Clustered Index
CREATE CLUSTERED INDEX [IndexName]
ON [TableName]([ColumnName])
- 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
10. 1. Non-Clustered Index
* Non-Clustered Index
Demo
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
- 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
11. DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấn
? Statistics được sử dùng như thế nào ?
+ Lần 1:
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Kim%'
+ Lần 2:
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Ki%'
+ Lần 3:
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'K%'
12. Demo
DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Tạo Index
CREATE INDEX Member_LName
ON member(Lastname, FirstName, MiddleInitial)
* Truy vấn
SELECT m.LastName, m.FirstName, m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Kim%'
Không có Statistics
Có Statistic trên FirstName
+ Thực thi truy vấn
+ Câu truy vấn phát sinh Statistics
Clustered Index Scan trên Index member_ident
StatisticsName: _WA_Sys_00000003_0CBAE877
Logical reads: 144
+ Thực thi truy vấn
*member_ident: Clustered Index mặc định của Primary Key
Nonclustered Index Scan trên Index Member_LName
Theo thống kê có 1.96078 dòng trả về
(Estimated Number of Rows)
Logical reads: 46
13. Demo
DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Ki%'
+ Thực thi truy vấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WITH(INDEX(member_ident))
WHERE m.FirstName LIKE 'Ki%'
+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
Clustered Index Scan trên Index member_ident
Estimated Number of Rows : 19.6078 dòng
Estimated Number of Rows : 19.6078 dòng
Logical reads: 82
Logical reads: 144
Chi phí thực hiện truy vấn
Thấp
Cao
14. Demo
DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Truy vấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'K%'
+ Thực thi truy vấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WITH(INDEX(Member_LName))
WHERE m.FirstName LIKE 'K%'
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Nonclustered Index Scan trên Index Member_LName
Estimated Number of Rows : 431,373 dòng
Estimated Number of Rows : 431,373 dòng
Logical reads: 144
Logical reads: 935
Chi phí thực hiện truy vấn
Thấp
Cao
15. Demo
DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Update dữ liệu ? Khi nào Statistics được cập nhật ?
UPDATE member
SET firstname = 'Kimberly'
WHERE member_no >= 1 AND member_no <= 1000
Update 1.000 dòng
= 10% tổng số dòng
Tổng số dòng: 10.000
* Truy vấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WITH (INDEX (member_ident))
WHERE m.FirstName LIKE 'Kim%'
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Kim%'
+ Thực thi truy vấn
Nonclustered Index Scan trên Index Member_LName
Logical reads: 2072
Estimated Number of Rows : 1.96078 dòng
Actual Number of Rows: 1001
16. Demo
DatabaseName: Credit
Table: member(member_no,lastname,firstname,middleinitial,city,phone_no)
* Update dữ liệu
UPDATE member
SET firstname = 'Kimberly'
WHERE member_no > 1000 AND member_no <= 2500
Số dòng Updaet
1.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ấn
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WITH (INDEX (member_ident))
WHERE m.FirstName LIKE 'Kim%'
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144
SELECT m.LastName, m.FirstName,
m.MiddleInitial, m.Phone_no, m.City
FROM dbo.Member AS m
WHERE m.FirstName LIKE 'Kim%'
+ Thực thi truy vấn
Clustered Index Scan trên Index member_ident
Logical reads: 144
Estimated Number of Rows : 2509,8 dòng
Actual Number of Rows: 2501
17. - 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