A Index I. Tổng quan về Index: Chỉ mục (Index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thu thập dữ liệu. Hiểu đơn giản, một chỉ mục là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là tương tự như một chỉ mục trong Mục lục của cuốn sách. Nhiệm vụ của Index: tạo chỉ mục cho bảng Ví dụ, nếu bạn muốn tham chiếu tất cả các trang trong một cuốn sách về một chủ đề nào đó, đầu tiên bạn nghĩ ngay đến mục lục của nó, mà liệt kê tất cả các chương, chủ đề theo thứ tự và sau đó được tham chiếu tới một hoặc nhiều trang cụ thể. II.Cấu trúc Index dạng Btree 1. Clustered a. Clustered Index sẽ tiến hành lưu trữ các bản ghi của bảng ở mức vật lý rồi tiến hành sắp xếp chúng. b. DL được lưu trữ theo cách sắp xếp trên khóa clustered và mỗi nút lá (leaf) của clustered index chứa 1 bản ghi. c. Các đặc điểm: Mỗi bảng chỉ được phép có một Clustered Index. PK chính là một Clustered Index Clustered Index chỉ được tạo trên cột hoặc tập cột có chứa những giá trị hoặc tập giá trị duy nhất. d. Cú pháp: CREATE CLUSTERED INDEX Tên_index ON Tên_bảng(Các_cột); e. Ví dụ: Nếu bảng Student chưa có PK, ta thiết lập Clustered Index cho nó như sau: CREATE CLUSTERED IND
Trang 1INDEX VÀ VIEW TRONG SQL
A- Index
I Tổng quan về Index:
- Chỉ mục (Index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thu thập dữ liệu Hiểu đơn giản, một chỉ mục là một con trỏ tới dữ liệu trong một bảng Một chỉ mục trong một Database là tương tự như một chỉ mục trong Mục lục của cuốn sách
- Nhiệm vụ của Index: tạo chỉ mục cho bảng
- Ví dụ, nếu bạn muốn tham chiếu tất cả các trang trong một cuốn sách về một chủ đề nào đó, đầu tiên bạn nghĩ ngay đến mục lục của nó, mà liệt kê tất cả các chương, chủ đề theo thứ tự và sau đó được tham chiếu tới một hoặc nhiều trang cụ thể
II.Cấu trúc Index dạng B-tree
1 Clustered
a Clustered Index sẽ tiến hành lưu trữ các bản ghi của bảng ở mức vật lý rồi tiến hành sắp xếp chúng
b DL được lưu trữ theo cách sắp xếp trên khóa clustered và mỗi nút lá (leaf) của clustered index chứa 1 bản ghi
c Các đặc điểm:
- Mỗi bảng chỉ được phép có một Clustered Index
- PK chính là một Clustered Index
- Clustered Index chỉ được tạo trên cột hoặc tập cột có chứa những giá trị hoặc tập giá trị duy nhất
d Cú pháp:
CREATE CLUSTERED INDEX Tên_index ON Tên_bảng(Các_cột);
e Ví dụ: Nếu bảng Student chưa có PK, ta thiết lập Clustered Index cho nó như sau:
Trang 2CREATE CLUSTERED INDEX clus_student ON Student(studentid);
2 Nonclustered
a Nonclustered Index được định nghĩa trên bảng trong đó dữ liệu có thể có cấu trúc phân cụm (clustered structure) hoặc ở dạng vun đống (heap)
b Nonclustered Index thường áp dụng cho bảng chứa 1 lượng bản ghi nhỏ; một bảng có thể chứa nhiều Nonclustered Index
c Dữ liệu được lưu trữ theo cách sắp xếp trên khóa Nonclustered và mỗi nút lá (leaf) của Nonclustered Index chứa một bản ghi
c Cú pháp:
CREATE NONCLUSTERED INDEX Tên_index ON Tên_bảng(Các_cột);
Hoặc:
CREATE INDEX Tên_index ON Tên_bảng(Các_cột);
d Ví dụ: Để tạo Nonclustered Index cho cột studentname của bảng Student:
CREATE INDEX nonclus_student ON Student(studentname);
III Các thao tác với Index:
1 Tạo một index (chỉ mục) trên một bảng, Giá trị Duplicate (trùng lặp) được cho
phép:
Cú pháp:
Create index (index_name)
On table_name (colum 1, colum 2,…)
Trong đó :
Index_name: tên của index
Table_name: tên của bảng mà cột được tạo index
Colum1, colum2: danh sách các cột tạo index
Trang 32 Tạo một index độc nhất trên một bảng, Giá trị Duplicate không được cho phép:
Lưu ý: Khi đã tạo Unique Index trên cột hay tập cột của bảng thì sau đó bạn sẽ
không thể chèn (Insert) vào bảng này Bản ghi có giá trị hay tập giá trị giống với bất kỳ giá trị hay tập giá trị đã được chèn trước đó
Cú pháp :
Create unique index (index _name)
On table_name (colum1, colum2,…)
Ví dụ:
3 Nếu muốn tạo một index kết hợp giữa các cột
cú pháp:
Create index (index_name)
On table_name (lastname, firstname)
Ví dụ cơ bản:
4 Drop index
Được sử dụng để xóa index trong bảng
Cú pháp:
Drop index table_name.index_name
5. Khi nào nên tránh sử dụng chỉ mục trong SQL?
- Mặc dù index trong SQL được tạo ra để truy cập trong bảng nhanh chóng, tuy nhiên
nó làm chậm phép thực thi các câu truy vấn của DML như : insert, update, delete,… trên bảng vì index SQL và bảng được cập nhật cùng lúc khi thao tác DML được thực
Trang 4hiện, vì vậy chỉ sử dụng index trong SQL trong các cột được sử dụng để tìm kiếm bảng thường xuyên.
- Không bắt buộc phải tạo index trên bảng có ít dữ liệu
- Trong dữ liệu Oracle, bạn có thể xác định tối đa 16 cột trong index
- Các chỉ mục không nên được sử dụng trong các bảng nhỏ
- Bảng mà thường xuyên có các hoạt động update, insert
- Các chỉ mục không nên được sử dụng trên các cột mà chứa một số lượng lớn giá trị NULL
Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi
B - View
I Tổng quan
- View chỉ áp dụng cho câu lệnh SELECT, các cột của View cũng có thể được lấy từ các cột của View
II Chi tiết
1 Phân loại View
- Có 3 loại View cơ bản:
+ Standard View : View được tạo bao gồm các cột là các cột của các bảng hoặc các View khác
+ Indexed View: View được tạo và được đặt chỉ mục Unique Clustered Index
+ Partitioned view: view được tạo bao gồm các dữ liệu được phân cụm ngang từ một hoặc một bảng
2 Ưu điểm
+ Tăng tính bảo mật thông qua các truy cập được phân quyền riêng + Cho phép tùy chỉnh việc hiển thị dữ liệu
+ Cho phép gộp dữ liệu trên nhiều bảng và View
3 Nhược điểm
+ Khi truy vấn trong View có thể sẽ chậm hơn trong Table
+ Bị phụ thuộc vào Table gốc, nếu Table gốc thay đổi cấu trúc thì đòi hỏi View cũng phải thiết kế lại cho phù hợp
4 System View ( View hệ thống)
- Các thuộc tính của các đối tượng như bảng hay View có thể được lưu trữ vào các bảng hệ thống đặc biệt gọi là metadata ( siêu dữ liệu)
+ Meta có thể được xem thông qua System View ( View hệ thống) + System View sẽ tự động đưuọc chèn vào cơ sở dữ liệu của người dùng :
Trang 5III Thao tác với View
1 Tạo View
Cú pháp
Note: không tạo View mà trong đó có hai cột có tên giống nhau
Ví dụ : Tạo một View để xem thông tin của tất cả các sinh viên sinh năm 1998
Kết quả:
2 Thực thi View
Vì View là một bảng ảo nên việc thực thi View cũng tương tự như việc sử dụng câu lệnh SELECT đối với các bảng
Ví dụ:
Kết quả
3 Sửa View:
Ví dụ:
Kết quả:
Trang 64 Xóa View
Dùng câu lệnh DROP VIEW
Ví dụ:
Kết quả là khi thực hiện lêch select sẽ báo lỗi
5 Xem định nghĩa View
Cách 1: Sử dụng thủ tục lưu trữ sp_helptext theo cú pháp sau:
Ví dụ:
Cách 2: Sử dụng hàm
Ví dụ:
Trang 7Cách 3: Sử dụng thủ tục lưu trữ sp_depends:
Ví dụ:
IV Các tùy chọn khi tạo hoặc sửa View
1 With encryption
Dùng để mã hóa định nghĩa View
Cú pháp
Ví dụ: Sửa View sinh_vien_nhieu_mon để không cho phép dùng xem thông tin về nó:
Thực thi:
2 With check option
Dùng để đảm bảo rằng những giá trị áp dụng khi sửa (UPDATE) bản ghi qua View phải đáp ứng được điều kiện đã đặt ra trong quá trình tạo View
Cú pháp:
Trang 8Ví dụ:
Thực thi:
Kết quả
Điều kiện ở câu lệnh SELCT đưa ra là phải =1995, nhưng ở câu lệnh UPDATE thì năm sẽ là năm hiện tại, CHECK OPTION không cho phép làm điều này
3 Tạo chỉ mục INDEX cho View
Để tạp chỉ mục cho một View nào đó bạn cần thiết lập tùy chọn cho WITH SCHEMABINDING cho View trước
Cú pháp:
Ví dụ:
Trang 94 Sắp xếp trên View
Nếu bạn muốn tập kết quả của View đưuọc sắp xếp (ORDER BY) theo thứ
tự tăng hay giảm của cột hay tập cột nàp đó có thể sử dụng mệnh đề
TOP(99.99) PERCENT….ORDER BY
Ví dụ: Theo chiều tăng dần cuat cột Studentname( họ và tên sinh viên)