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 indexNon-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
. 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. đế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í