Chỉ mục

Cải thiện hiệu năng truy vấn trong SQL Server

Dean Smith

Founder, Atamai Analytics

Chỉ mục là gì?

  • Cấu trúc giúp tăng tốc truy xuất dữ liệu từ bảng
  • Dùng để định vị dữ liệu nhanh, không quét toàn bộ bảng
  • Hữu ích để tăng hiệu năng truy vấn có điều kiện lọc
  • Áp dụng cho các cột của bảng
  • Thường do quản trị viên CSDL thêm
Cải thiện hiệu năng truy vấn trong SQL Server

Chỉ mục cụm và không cụm

Chỉ mục cụm (Clustered)

  • So sánh: từ điển
  • Trang dữ liệu được sắp theo cột/các cột có chỉ mục
  • Mỗi bảng chỉ có một
  • Tăng tốc tìm kiếm
Cải thiện hiệu năng truy vấn trong SQL Server

Chỉ mục cụm và không cụm

Chỉ mục cụm (Clustered)

  • So sánh: từ điển
  • Trang dữ liệu được sắp theo cột/các cột có chỉ mục
  • Mỗi bảng chỉ có một
  • Tăng tốc tìm kiếm

Chỉ mục không cụm (Non-clustered)

  • So sánh: sách giáo khoa có mục lục cuối sách
  • Cấu trúc là lớp con trỏ chỉ mục có thứ tự trỏ đến các trang dữ liệu không theo thứ tự
  • Một bảng có thể có nhiều hơn một
  • Cải thiện thao tác chèn và cập nhật
Cải thiện hiệu năng truy vấn trong SQL Server

Chỉ mục cụm: cấu trúc B-tree

 

  • NÚT GỐC

 

  • CÁC NÚT NHÁNH

 

  • CÁC NÚT TRANG
Cải thiện hiệu năng truy vấn trong SQL Server

Chỉ mục cụm: cấu trúc B-tree

NÚT GỐC:                          
                                    A G O W
CÁC NÚT NHÁNH:
                A B E F             G H J K             O P S T
CÁC NÚT TRANG:
          Trang 1            Trang 2            Trang 3             Trang 4
       Cột chỉ mục |...  Cột chỉ mục |...  Cột chỉ mục | ...  Cột chỉ mục | ...
       A | ...            E | ...            I | ...             M | ...
       B | ...            F | ...            J | ...             N | ...
       C | ...            G | ...            K | ...             O | ...
       D | ...            H | ...            L | ...             P | ...
       ...                ...                ...                 ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers không có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
CÁC NÚT TRANG:
            Trang 1
         CustomerID |...
         ALFKI | ... 
         ANATR | ...
         BLONP | ... 
         BSBEV | ...
         ...                 
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers không có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
CÁC NÚT TRANG:
            Trang 1              Trang 2
         CustomerID |...     CustomerID|...
         ALFKI | ...         FOLIG | ...
         ANATR | ...         FRANK | ...
         BLONP | ...         GALED | ...
         BSBEV | ...         GREAL | ...
         ...                 ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers không có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
CÁC NÚT TRANG:
            Trang 1              Trang 2              Trang 3
         CustomerID |...     CustomerID|...      CustomerID | ... 
         ALFKI | ...         FOLIG | ...         LILAS | ...  
         ANATR | ...         FRANK | ...         LINOD | ...  
         BLONP | ...         GALED | ...         MEREP | ...  
         BSBEV | ...         GREAL | ...         MORGK | ...   
         ...                 ...                 ...          
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers không có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
CÁC NÚT TRANG:
            Trang 1              Trang 2              Trang 3               Trang 4
         CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
         ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
         ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
         BLONP | ...         GALED | ...         MEREP | ...           
         BSBEV | ...         GREAL | ...         MORGK | ...          
         ...                 ...                 ...                  ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
NÚT GỐC:                          
                                         ALFKI FOLIG OLDWO WOLZA
CÁC NÚT NHÁNH:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
CÁC NÚT TRANG:
                    Trang 1              Trang 2              Trang 3               Trang 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
NÚT GỐC:                          
                                                     OLDWO WOLZA
CÁC NÚT NHÁNH:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
CÁC NÚT TRANG:
                    Trang 1              Trang 2              Trang 3               Trang 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
NÚT GỐC:                          
                                                     OLDWO WOLZA
CÁC NÚT NHÁNH:
                                                                          OLDWO QUICK 
CÁC NÚT TRANG:
                    Trang 1              Trang 2              Trang 3               Trang 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
NÚT GỐC:                          
                                                     OLDWO WOLZA
CÁC NÚT NHÁNH:
                                                                          OLDWO QUICK 
CÁC NÚT TRANG:
                                                                                 Trang 4
                                                                              CustomerID | ...
                                                                              OCEAN | ...
                                                                              PARIS | ...
                                                                              PICCO | ...
                                                                              QUICK | ...
                                                                              ...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Customers có chỉ mục cụm

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
NÚT GỐC:                          
                                                     OLDWO WOLZA
CÁC NÚT NHÁNH:
                                                                          OLDWO QUICK 
CÁC NÚT TRANG:
                                                                                 Trang 4
                                                                              CustomerID | ...



                                                                             PARIS | ...


Cải thiện hiệu năng truy vấn trong SQL Server

Chỉ mục cụm: ví dụ

SET STATISTICS IO ON
SELECT * 
FROM PlayerStats 
WHERE Team = 'OKC'

Bảng PlayerStats không có chỉ mục

Table 'PlayerStats'. ..., logical reads 12, ...

 

Bảng PlayerStatschỉ mục cụm trên Team

Table 'PlayerStats'. ..., logical reads 2, ...
Cải thiện hiệu năng truy vấn trong SQL Server

Ayo berlatih!

Cải thiện hiệu năng truy vấn trong SQL Server

Preparing Video For Download...