SQL Server - Learn & More

SQL Server - Learn & More SQL Sever

08/04/2026

KIẾN TRÚC VÀ CHIẾN LƯỢC ĐÁNH INDEX TRONG SQL SERVER: TỐI ƯU HÓA HIỆU NĂNG DỮ LIỆU LỚN

1. GIỚI THIỆU VỀ INDEX (CHỈ MỤC)
Trong quản trị cơ sở dữ liệu, Index (chỉ mục) thường được ví như mục lục của một cuốn sách dày hàng nghìn trang. Thay vì phải lật từng trang (Table Scan) để tìm một thông tin cụ thể, bạn chỉ cần tra cứu mục lục để biết chính xác trang cần đến (Index Seek).

Về mặt kỹ thuật, Index là một cấu trúc dữ liệu trên đĩa (on-disk structure) gắn liền với một bảng hoặc view, giúp tăng tốc độ truy xuất hàng dữ liệu. Tuy nhiên, việc sử dụng Index là một "con dao hai lưỡi" – nó đòi hỏi sự cân bằng tinh tế giữa tốc độ đọc và tốc độ ghi.

2. CÁC LOẠI INDEX PHỔ BIẾN
SQL Server cung cấp nhiều loại chỉ mục, nhưng quan trọng nhất là hai loại:

A. Clustered Index (Chỉ mục cụm)
- Đặc điểm: Sắp xếp và lưu trữ dữ liệu vật lý của bảng dựa trên khóa chỉ mục. Vì dữ liệu chỉ có thể được sắp xếp theo một thứ tự duy nhất, mỗi bảng chỉ có duy nhất một Clustered Index.
- Cấu trúc: Các nút lá (leaf nodes) của Clustered Index chính là các trang dữ liệu thực tế.
- Lời khuyên: Thường được tạo mặc định trên cột Primary Key. Nên chọn các cột có giá trị tăng dần (như IDENTITY) để tránh hiện tượng phân mảnh trang (Page Splitting).

B. Non-Clustered Index (Chỉ mục không cụm)
- Đặc điểm: Có cấu trúc tách biệt hoàn toàn với dữ liệu của bảng. Nó chứa các giá trị khóa và mỗi giá trị khóa có một con trỏ (Row Locator) dẫn đến hàng dữ liệu thực tế.
- Cấu trúc: Giống như mục lục ở cuối sách, liệt kê từ khóa và số trang.
- Ưu điểm: Có thể tạo nhiều Non-Clustered Index trên một bảng để hỗ trợ các kiểu truy vấn khác nhau.

3. PHÂN TÍCH ƯU ĐIỂM
- Tăng tốc độ truy vấn (SELECT): Đây là lợi ích lớn nhất. Các câu lệnh có điều kiện WHERE, JOIN, hoặc toán tử so sánh (>,

17/09/2024

TEMPORARY TABLE SQL SERVER

Trong SQL Server, Temporary Table (bảng tạm) là một công cụ rất hữu ích cho các tác vụ xử lý dữ liệu tạm thời. Temporary Table giúp lưu trữ dữ liệu tạm thời dùng cho các tác vụ cần xử lý dữ liệu phức tạm. Trong bài viết này, chúng ta sẽ tìm hiểu về các loại bảng tạm, cách sử dụng chúng và một số lưu ý khi làm việc với bảng tạm trong SQL Server.

1. Temporary Table Là Gì?

Temporary Table (bảng tạm) là loại bảng được tạo ra trong SQL Server để lưu trữ dữ liệu tạm thời. Tùy thuộc vào nhu cầu sử dụng, bảng tạm có thể tồn tại trong một phiên giao dịch nhất định hoặc tồn tại trên toàn bộ phiên làm việc của một kết nối cụ thể.

Các Loại Temporary Table:

SQL Server hỗ trợ hai loại bảng tạm:

a. Local Temporary Table (Bảng tạm cục bộ):
- Tên bảng bắt đầu bằng ký tự # (ví dụ: ).
- Chỉ tồn tại trong phiên giao dịch hiện tại và bị xóa khi phiên đó kết thúc hoặc khi kết nối bị đóng.
- Chỉ có thể được truy cập bởi session (phiên) đã tạo ra nó.

b. Global Temporary Table (Bảng tạm toàn cục):
- Tên bảng bắt đầu bằng # # (ví dụ: # ).
- Có thể được truy cập bởi tất cả các phiên giao dịch và bị xóa khi tất cả các session đã tạo và sử dụng nó đều kết thúc.

Cú Pháp Tạo Temporary Table
• Tạo bảng tạm cục bộ (Local Temporary Table):

CREATE TABLE (
ID INT,
Name NVARCHAR(50)
);

• Tạo bảng tạm toàn cục (Global Temporary Table):

CREATE TABLE # (
ID INT,
Name NVARCHAR(50)
);
2. Sử dụng Temporary Table

Bảng tạm được sử dụng trong nhiều trường hợp khác nhau, thường là để lưu trữ dữ liệu tạm thời trong các quá trình xử lý phức tạp, hoặc khi bạn cần xử lý nhiều bước trước khi lưu dữ liệu vào bảng chính.

Ví dụ 1: Tạo bảng tạm để lưu kết quả tạm thời từ một truy vấn phức tạp.
CREATE TABLE (
EmployeeID INT,
FullName NVARCHAR(100),
Department NVARCHAR(50)
);

-- Chèn dữ liệu vào bảng tạm
INSERT INTO
SELECT EmployeeID, FullName, Department
FROM Employees
WHERE Department = 'IT';

-- Sử dụng bảng tạm trong các câu lệnh tiếp theo
SELECT * FROM ;

-- Xóa bảng tạm sau khi sử dụng xong
DROP TABLE ;

3. Tại Sao Nên Sử Dụng Temporary Table?

- Xử lý dữ liệu phức tạp: Khi làm việc với các truy vấn phức tạp có nhiều bước trung gian, bảng tạm giúp lưu trữ kết quả tạm thời để dễ dàng xử lý trong các bước tiếp theo.
- Tăng hiệu suất: Temporary Table giúp cải thiện hiệu suất trong một số trường hợp bằng cách lưu trữ dữ liệu tạm thời và giảm tải cho SQL Server khi cần thực hiện nhiều phép tính hay join phức tạp.
- Lưu trữ dữ liệu tạm thời: Dữ liệu tạm thời có thể được xử lý nhanh chóng mà không

4. Những Lưu Ý Khi Sử Dụng Temporary Table
- Quản lý tài nguyên: Temporary Table được lưu trữ trong cơ sở dữ liệu hệ thống tempdb, vì vậy bạn cần chú ý quản lý tốt tài nguyên để tránh việc tempdb bị quá tải.
- Tối ưu hóa hiệu suất: Khi làm việc với dữ liệu lớn trong bảng tạm, bạn có thể cần tạo chỉ mục (index) trên bảng tạm để cải thiện hiệu suất truy vấn.
- Xóa bảng tạm sau khi sử dụng: Mặc dù SQL Server tự động xóa bảng tạm khi phiên giao dịch kết thúc, nhưng tốt nhất là bạn nên chủ động xóa bảng tạm khi không còn sử dụng để giải phóng tài nguyên sớm hơn.

5. Kết luận

Temporary Table hay CTE đều giúp ta xử lý các câu truy vấn phức tạp 1 cách đơn giản hơn.
Tùy vào nhu cầu và mục đích, mà có thể áp dụng phương pháp cho phù hợp.
Chẳng hạn truy vấn có dạng đệ quy, thì ưu tiên CTE, hoặc truy vấn dữ liệu mà được sử dụng ở nhiều nơi, thì nên dùng Temporary Table.

Send a message to learn more

Common Table Expressions (CTE) trong SQL: Giải pháp Tối Ưu cho Các Truy Vấn Phức Tạp?Khi làm việc với các truy vấn phức ...
04/09/2024

Common Table Expressions (CTE) trong SQL: Giải pháp Tối Ưu cho Các Truy Vấn Phức Tạp?

Khi làm việc với các truy vấn phức tạp hoặc đòi hỏi nhiều phép ‘join’, việc kiểm soát được các câu lệnh làm sao cho dễ nhìn, có cấu trúc không phải là vấn đề đơn giản. Và lúc này, Common Table Expressions (CTE) coi như là 1 giải pháp có thể giúp ta giải quyết vấn đề này.

1. CTE là gì?

CTE (Common Table Expression) là một tính năng mạnh mẽ trong SQL cho phép bạn định nghĩa các bảng tạm thời ngay trong câu truy vấn. Những bảng này không tồn tại trong cơ sở dữ liệu như các bảng thực, mà chỉ tồn tại trong phạm vi của truy vấn. CTE giúp tăng cường tính rõ ràng và có thể tái sử dụng được trong các câu lệnh SQL phức tạp.

2.Lợi ích của CTE

2.1 Tăng tính rõ ràng và dễ hiểu: Khi bạn làm việc với các truy vấn lớn có nhiều phép JOIN và điều kiện WHERE phức tạp, việc đọc hiểu và bảo trì mã nguồn trở nên khó khăn. CTE giúp bạn chia nhỏ truy vấn thành các bước logic rõ ràng hơn, giúp mã nguồn dễ đọc và dễ bảo trì.

2.2 Tái sử dụng trong truy vấn: CTE cho phép bạn định nghĩa một tập hợp dữ liệu một lần và sau đó sử dụng lại nó nhiều lần trong cùng một truy vấn. Điều này đặc biệt hữu ích khi bạn cần sử dụng cùng một tập hợp kết quả cho nhiều phép tính hoặc lọc khác nhau.

2.3 Hỗ trợ đệ quy: CTE đệ quy là một trong những công cụ mạnh mẽ nhất của SQL để làm việc với các cấu trúc dữ liệu phân cấp, chẳng hạn như cây thư mục hoặc sơ đồ tổ chức. Bằng cách sử dụng CTE đệ quy, bạn có thể dễ dàng truy vấn và xử lý các dữ liệu có cấu trúc phức tạp này.

3. Cú pháp cơ bản của CTE

CTE được định nghĩa bằng từ khóa WITH, theo sau là tên của CTE và khối truy vấn. Sau khi được định nghĩa, CTE có thể được tham chiếu trong câu truy vấn chính như một bảng thông thường.
Ví dụ về một CTE đơn giản:

WITH EmployeeCTE AS (
SELECT EmployeeID, FirstName, LastName, DepartmentID
FROM Employees
WHERE DepartmentID = 5
)
SELECT *
FROM EmployeeCTE;

Trong ví dụ này, EmployeeCTE là một CTE được sử dụng để trích xuất dữ liệu từ bảng Employees. Kết quả của CTE sau đó được sử dụng trong truy vấn chính để lấy toàn bộ thông tin của nhân viên trong phòng ban có ID là 5.

4. Recursive CTE (CTE Đệ Quy)

Một trong những tính năng độc đáo của CTE là khả năng tự tham chiếu, hay còn gọi là đệ quy. Điều này cho phép bạn truy vấn các cấu trúc dữ liệu phân cấp một cách hiệu quả.
Ví dụ về CTE đệ quy để tính toán sơ đồ tổ chức:

WITH OrgChart AS (
SELECT EmployeeID, ManagerID, FirstName, LastName, 0 AS Level
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID, e.ManagerID, e.FirstName, e.LastName, oc.Level + 1
FROM Employees e
INNER JOIN OrgChart oc ON e.ManagerID = oc.EmployeeID
)
SELECT *
FROM OrgChart
ORDER BY Level;

Trong ví dụ này, CTE đệ quy OrgChart bắt đầu bằng việc lấy dữ liệu của các nhân viên không có người quản lý (quản lý cấp cao nhất). Sau đó, nó liên tục truy vấn và thêm vào các nhân viên dưới quyền của từng quản lý, xây dựng một cấu trúc cây tổ chức.

5. Khi nào nên sử dụng CTE?

CTE rất hữu ích trong các tình huống sau:
• Khi bạn cần chia nhỏ một truy vấn phức tạp thành các phần nhỏ hơn, dễ quản lý hơn.
• Khi bạn muốn tái sử dụng cùng một tập hợp kết quả trong nhiều phép toán hoặc truy vấn.
• Khi bạn làm việc với các cấu trúc dữ liệu phân cấp và cần sử dụng truy vấn đệ quy.
• Khi bạn cần làm cho truy vấn của mình dễ đọc và dễ bảo trì hơn.

6. Kết luận

CTE là một công cụ mạnh mẽ trong SQL, giúp cải thiện khả năng viết truy vấn phức tạp một cách rõ ràng và hiệu quả hơn. Từ việc chia nhỏ các truy vấn phức tạp đến việc xử lý các cấu trúc dữ liệu phân cấp, CTE là một phần không thể thiếu đối với các nhà phát triển và quản trị viên cơ sở dữ liệu.
Nếu bạn chưa quen với CTE, hãy bắt đầu với các CTE đơn giản trong các truy vấn của bạn và dần dần khám phá tiềm năng của CTE đệ quy. Chắc chắn rằng, CTE sẽ giúp bạn nâng cao khả năng quản lý dữ liệu và tối ưu hóa các truy vấn của mình một cách đáng kể.

7. Tài liệu tham khảo
https://learn.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver16

P/s: Liệu CTE có phải là công cụ mạnh mẽ nhất trong việc đơn giản hóa các câu truy vấn phức tạp? Hay còn có giải pháp khác thay thế tốt hơn? Hãy đợi bài viết sau của mình nhé!

Address

Đường Số 8
Thủ Đức District

Alerts

Be the first to know and let us send you an email when SQL Server - Learn & More posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Contact The Business

Send a message to SQL Server - Learn & More:

Share