Rule cung cấp 1 cơ chế để thực thi bảo toàn domain domain integrity các cột hay kiểu dữ liệu người dùng user-defined datatypes 1 cột của bảng, nên dùng ràng buộc... Hạn chế khi dùng
Trang 1Thiết kế bảng
Trang 3 Rule cung cấp 1 cơ chế để thực thi bảo
toàn domain (domain integrity) các cột
hay kiểu dữ liệu người dùng (user-defined datatypes)
1 cột của bảng, nên dùng ràng buộc
Trang 4Rules Cú pháp lệnh CREATE RULE
CREATE RULE [owner.]rulename AS
Trang 5 Để xem thông tin của 1 rule:
sp_help <rule name>
Để xem nội dung của 1 rule:
sp_helptext <rule name>
Để huỷ 1 rule
DROP RULE { rule } [ , n ]
Trang 6Gắn rule vào 1 cột hay kiểu dữ liệu
người dùng
sp_bindrule [ @rulename = ] 'rule' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
@Object_name: là cột của bảng hay kiểu
dữ liệu người dùng mà rule được gắn
vào Nếu object_name không ở dạng
table.column, thì nó được xem là kiểu dữ liệu của người dùng Mặc định các cột
hiện tại của kiểu dữ liệu người dùng
Trang 8Hạn chế khi dùng Rules
Mỗi lần chỉ có 1 rule được gắn kết vào 1 cột hay 1 kiểu dữ liệu của người dùng.
Nếu 1 rule được gắn kết vào 1 kiểu dữ
liệu người dùng, nó không thay thế được rule đã được gắn kết trước đó vào các cột của kiểu dữ liệu người dùng.
Nếu 1 rule mới được gắn kết vào 1 cột
hay kiểu dữ liệu của người dùng đang gắn kết vào 1 rule khác, thì rule mới này
sẽ thay thế rule cũ.
Các rule không áp dụng được cho dữ liệu
đã có sẵn trong bảng Các dữ liệu có sẵn không phải tuân the điều kiện được xác định bởi rule.
Trang 9Xóa gắn kết rule khỏi 1 cột hay kiểu dữ liệu người dùng
Trang 10Các ví dụ
CREATE RULE typBook AS @list IN ('business',
'mod_cook', 'popular_comp', 'psychology')
sp_bindrule 'typBook', 'Titles.Type'
Gắn kết rule typBook vào cột Type của bảng
Titles.
sp_unbindrule 'Titles.Type'
Xóa các rule đã gắn kết vào cột Type vào bảng Titles.
Sp_addType BookType, ‘char(20)’,’NOT NULL’
Sp_bindrule ‘typBook’, BookType
Gắn kết rule typBook vào kiểu dữ liệu người dùng
sp_unbindrule ‘BookType'
Xoá gắn kết rule đã gắn kết vào kiểu dữ liệu của người dùng
Trang 11Defaults - Tạo giá trị mặc
Ví dụ:
CREATE DEFAULT phonedflt AS
'unknown'
Trang 12Xoá mặc định
DROP DEFAULT { default } [ , n ]
Lệnh drop có thể xóa cùng lúc nhiều default
Ví dụ:
DROP DEFAULT phonedflt
Trang 13Sử dụng defaults
Sau khi được tạo DEFAULT, nó cần được gắn kết vào 1 cột hay kiểu dữ liệu người dùng.
sp_bindefault default_name, object_name
[, FUTUREONLY]
Xóa gắn kết default làm cho nó không
còn áp dụng được vào cột của bảng hay kiểu dữ liệu người dùng.
sp_unbindefault object_name
[, FUTUREONLY]
Trang 15Ví dụ default và kiểu dữ liệu người dùng
sp_addType typCity, ‘char(15)’
CREATE DEFAULT defCity AS 'Oakland '
sp_bindefault defCity, 'typCity'
sp_binddefault ‘defCity’,
‘customer.cCity’
Trang 18Cơ bản về truy xuất dữ liệu
Access fundamentals
Khi người dùng truy xuất dữ liệu, SQL
server sẽ xác định xem có tồn tại sẵn 1 chỉ mục nào không?
Query optimizer sẽ so sánh các chỉ mục hiện có với yêu cầu của lệnh truy vấn để tìm cách thực thi tối ưu như sau:
Nếu không có chỉ mục, SQL server sẽ duyệt toàn
bộ bảng
Nếu có chỉ mục thích hợp, nó sẽ dùng để định vị
dữ liệu cần tìm.
Trang 19Cơ bản về truy xuất dữ liệu Access fundamentals
Trong lúc quét duyệt bảng:
SQL Server sẽ bắt đầu ở vị trí vật lý đầu tiên của bảng
SQL Server sẽ tiếp tục quét cho đến cuối bảng
theo từng dòng để tìm dữ liệu thích hợp
Các hàng thoả mãn tiêu chuẩn dò tìm sẽ được
trích ra và là kết quả trả về của lệnh truy vấn
Trang 20Cơ bản về chỉ mục
Chỉ mục được tạo ra dựa theo các giá trị được xếp thứ tự từ 1 hay nhiều cột được chọn.
Chỉ mục được tạo tự động bất cứ lúc nào ta xác định khoá chính hay ràng buộc unique.
Mỗi bảng chỉ có thể có duy nhất 1 chỉ mục clustered nhưng không bắt buộc
là phải có chỉ mục này.
Một bảng có thể có tới 249 chỉ mục nonclustered
Trang 22 Các bảng nhỏ nói chung không có lợi nhiều trong việc tạo chỉ mục
Trang 23Hướng dẫn tạo chỉ mục
Các cột cần tạo chỉ mục sẽ phụ thuộc vào dữ liệu và cách dữ liệu được truy xuât.
Nên cân nhắc khi chọn cột làm chỉ mục
Nên tạo chỉ mục cho các cột sau:
Trang 24Khái quát về chỉ mục
Ch í mục là 1 danh sách các giá trị trong 1 bảng kèm theo v ị trí hàng chứa giá trị tương ứng trong bảng đó
Chỉ mục có thể được tạo từ 1 hay 1 tổ hợp các cột của bảng và được thực thi trong dạng B-tree (cây nhị phân).
B-tree được xếp dựa theo giá trị dò tìm
(search key) và có thể dò tìm hiệu quả dựa vào tổ hợp các ký tự đầu của search key
Ví dụ: chỉ mục trên các cột A,B,C có thể
được dò tìm hiệu quả dựa theo giá trị trên cột A, trên cột A,B hay A,B,C
Trang 25Bảng Employee và chỉ mục trên
cột emp_id
Trang 26Tạo chỉ mục
Cú pháp:
CREATE [ UNIQUE ] [ CLUSTERED |
NONCLUSTERED ] INDEX index_name
ON { table | view } ( column [ ASC | DESC ] [ , n ] )
[ WITH < index_option > [ , n] ]
Khi chỉ mục được tạo, 1 hàng sẽ được thêm vào bảng sysindexes Để nhận thông tin về các chỉ mục của 1 bảng:
sp_helpindex table_name
Trang 27Các tuỳ chọn của lệnh index
< index_option > :: =
{ PAD_INDEX | FILLFACTOR = fillfactor | IGNORE_DUP_KEY |
DROP_EXISTING | STATISTICS_NORECOMPUTE | SORT_IN_TEMPDB
}
Trang 28Fill Factor
Với chỉ mục clustered, dữ liệu được sắp
xếp và lưu trữ trong các trang dữ liệu
(data page).
Với chỉ mục nonclustered, các giá trị
khoá sẽ được lưu riêng trong các trang chỉ mục ( index page)
Khí 1 hàng mới được thêm vào 1 trang chỉ mục đã đầy thì SQL Server sẽ chuyển gần
1 nữa số hàng của trang đó vào 1 trang mới để có chỗ cho hàng mới Việc sắp xếp này được gọi là phân trang ( page split)
Việc phân trang có thể ảnh hưởng đến
việc thực thi và phân mảnh việc lưu trữ
dữ liệu trong bảng
Trang 29Giá trị của fill factor được tính theo %
từ 0->100 dùng để xác định bao nhiêu
dữ liệu được đưa vào 1 trang sau khi chỉ mục đã được tạo.
Trang 30 Xác định không gian trống đượcchừa lại trên mỗi trang (node) ở mức giữa của cây chỉ mục
Tuỳ chọn này chỉ được sử dụng khi
FILLFACTOR xác định, vì PAD_INDEX sử dụng cùng tỷ lệ phần trăm được xác
định bởi FILLFACTOR
Trang 32Managing indexes
Trang 33Managing indexes
Trang 34Công cụ Index Tuning Wizard
Công cụ Index Tuning Wizard trong SQL
Server được dùng để chọn lọc và tạo 1 tập hợp các chỉ mụcvà thông tin tốt nhất trong
Một tập hợp các lệnh truy vấn hay đuợc thực thi lặp đi lặp lại được xem như là workload.
Công cụ sẽ giúp phân tích hiệu quả thực thi truy vấn trong workload Nếu các lệnh truy vấn trong workload tương đối ít, công cụ sẽ đề nghị cách tối ưu nó, bằng cách đề nghị các chỉ mục nên dùng.
Trang 35Ví dụ minh họa cho việc sử dụng công cụ INDEX TUNING WIZARD
Tạo 1 loạt các chỉ mục cho bảng Department trong CSDL Recruiment như sau:
CREATE NONCLUSTERED INDEX idxdepcode
Trang 36Ví dụ minh họa cho việc sử dụng công cụ INDEX TUNING WIZARD
SELECT Requisition.cRequisitionCode,
Position.vDescription,vDepartmentName FROM Position JOIN Requisition
ON Requisition.cPositionCode=
Position.cPositionCode JOIN Department
ON Requisition.cDepartmentCode=
Department.cDepartmentCode
Lệnh này có được xem là workload??
Trang 37Ví dụ minh họa cho việc sử dụng công cụ INDEX TUNING WIZARD
Dùng công cụ Index Tuning Wizard để phân tích tìm ra cách sử dụng tối ưu cho các index đã được tạo
Công cụ sẽ cung cấp cho người dùng các loại báo cao khác nhau dựa trên việc phân tích workload cần thực hiện.
Công cụ Index Tuning Wizard đã đề nghị như thế nào với các chỉ mục đã tạo??