Tải bản đầy đủ (.docx) (2 trang)

Session 2 Indexer

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (45.44 KB, 2 trang )

Index, hay "chỉ mục" thực chất là một dạng tương tự như phần mục lục của một cuốn sách hay của một cuốn từ
điễn vậy, các giá trị trong bảng được sắp theo cột, như vậy với suy nghĩ trên thì nếu cột nào được sắp index thì các
giá trị trong cột đó sẽ được sắp xếp trong một cấu trúc bảng trong theo một trật tự dựa vào dữ liệu của bảng đó, việc
làm này chủ yếu là giúp cho việc truy xuất trở nên nhanh hơn. Điều này tương tự như khi bạn tra từ điễn, thử tưởng
tượng khi từ điễn không sắp xếp các từ theo thứ tự như: A--->AA--->AB.... thì bạn sẽ mất bao lâu để tra một từ
.
Trong SQL, index đóng vai trò là tăng tốc truy xuất, do truy xuất cũng giống như khi bạn tra từ điễn, HT cần tìm kiếm
thông tin trong hàng ngàn dữ liệu nên việc sắp xếp là cần thiết, mặt khác, do việc sắp xếp các dữ liệu là duy nhất (như
trong từ điễn không thể có hai từ như nhau vì như vậy rất khó sắp xếp) nên có thể cho rằng index cũng tăng tính duy
nhất trong CSDL. Và cuỗi cùng, như đã biết các câu lệnh JOIN, ORDER BY, GROUP BY cũng yêu cầu việc truy xuất dữ
liệu liên tục nên index đồng thời cũng tăng tốc cho việc này.
Nghe có vẽ Index thật hữu dụng, nhưng khoan, index cũng có nhược điểm, cụ thể là để có index, bạn cần tạo nó, mà
việc này rất tốn thời gian, đối với các project mà chúng ta làm thì chả thấy gì, nhưng nếu đó là một CSDL lớn thì việc
này là cực kì lâu. Thứ hai, do index là tạo một cấu trúc bảng trong nên việc này gây tốn tài nguyên (nếu ai có cài
google search desktop sẽ biết điều này). Và cuối cùng, do index là sắp xếp các dữ liệu nên nếu có sự thay đổi thì
index cũng được update theo.
index trong CSDL có hai loại: Clustered Index và Non-Clustered Index.
Clustered index: thường được tự tạo ra khi bảng có primary key do primary key đã duy trì độ duy nhất dữ liệu của
cột, nên có thể nói clustered index chính là unique index. Trong clustered index, các dữ liệu ở cấu trúc bảng trong
được sắp xếp một cách vật lý, tức là trong clustered index, dữ liệu bảng trong được sắp xếp đúng theo thư mục cây
dựa vào bảng chữ cái. Cách làm việc của index là dựa trên ROOT PAGE, khi cần truy xuất, HT sẽ tìm đến địa chỉ cần
tìm trong bảng SYSINDEXES. Ví dụ như trong Root page có hai cột, một cột chứa dữ liệu trong cột index cột còn lại
chứa tham chiếu số trang(dòng) trong bảng, cột index có giá trị là A (tham chiếu trang bảng trong là 1) và D(tham
chiếu trang bảng trong là 2), (việc này do index quyết định), bạn cần tìm "C", như vậy theo hệ chữ cái, HT sẽ biết rằng
là C trong khoảng giữa A và D, HT từ đó dò đến trang bảng trong thứ 1 (tức chứa kí tự A, B, C .như vậy tương tự trang
2 sẽ là D,E,F...). Trong trang thứ 1, HT tiếp tục dò tìm kí tự C, lúc này kí tự C tham chiếu trang bảng thật là dòng 3
chẳng hạn. từ đó, HT lại lần đến trang bảng thật dòng 3 và dữ liệu được truy xuất (quá trình trên có thể tiếp tục nếu
dữ liệu nhiều). trong một bảng CHỈ được có duy nhất một clustered index
Non-Clustered Index: khác với clustered Index, non-Clustered Index không sắp xếp dữ liệu theo một trật tự vật lý
như clustered mà là "loạn xà ngầu" trong bảng thông tin, miễn sao nó nằm trong một logic do index qui định :D. trong
một bảng có thể chứa đến 249 non-clustered index. còn cách hoạt động thì tương tự clustered index, có khác là khi


truy xuất đến bảng thông tin cuối thì thông tin không được sắp xếp theo trật tự thôi ví dụ như A--->C---->B----->E----
>D.....
một bảng không có index gọi là HEAP.
mặc định thì primary key là clustered index còn foreign key là non-clustered index, do đó non-clustered index mặc
định không đẩy mạnh tính duy nhất dữ liệu.
trong thực hành, để xác định clustered index, thường thì đó là primary key, nếu bảng có khóa composite thì index tự
tạo cho cột khóa nào có dữ liệu dễ sắp xếp hơn. Nói chung thì clustered index thường không cần ta can thiệp, riêng
non-clustered index thì khác, trước hết cần biết CSDL dùng để làm gì, từ đó xác định dữ liệu cột nào thường dùng để
tìm kiếm trong các querry. Ở đây chủ yếu là các cột trong câu lệnh điều WHERE, ORDER BY, GROUP BY, hay các foreign
key trong querry yêu cầu JOIN thì bạn có thể yên tâm "phán" cho nó cái non-clustered index rồi :D

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×