SQL Server

Giới thiệu và Cài đặt SQL Server 2025

SQL Server 2025 (17.x) — RDBMS của Microsoft với native vector + JSON + RegEx + Copilot. Hướng dẫn cài đặt bằng Docker, SSMS, Azure Data Studio.

1. SQL Server 2025 — bản mới nhất

Microsoft SQL Server 2025 (internal version 17.x) là bản RTM chính thức — phát hành ngày 18/11/2025. Đây là bước nhảy lớn nhất kể từ SQL Server 2019, với AI-ready engine, native JSON, RegEx, và hàng loạt cải tiến performance. Bản CU2 (Cumulative Update 2) ra ngày 13/02/2026.

Điểm mới đáng chú ý

AI-ready & Vector Search

Kiểu dữ liệu VECTOR(n) native — hỗ trợ đến 2000 chiều (OpenAI embeddings 1536 dims vừa khít). VECTOR_DISTANCE với 4 metric: cosine, Euclidean, Manhattan, dot product. VECTOR_SEARCH cho similarity search top-K. DiskANN index — index trên SSD, nhanh millisecond, tiết kiệm 90% bộ nhớ so với HNSW. Full RAG ngay trong database engine: sp_invoke_external_rest_endpoint gọi OpenAI / Qwen / bất kỳ REST API nào từ T-SQL, CREATE EXTERNAL MODEL đăng ký model AI như database object.

Native RegEx (Google RE2)

Trước phải dùng CLR function. Giờ 6 hàm built-in: REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR, REGEXP_INSTR, REGEXP_COUNT, REGEXP_SPLIT_TO_TABLE. Engine Google RE2 — an toàn, không bị catastrophic backtracking như PCRE.

Native JSON — first-class type

Kiểu JSON thực sự (không còn là NVARCHAR(MAX) nữa). Binary storage — tiết kiệm 50% dung lượng. Hỗ trợ JSON document đến 2GB. In-place partial update qua .modify(). Hàm mới: JSON_ARRAYAGG(), JSON_OBJECTAGG(), JSON_CONTAINS(). JSON Index trên path cụ thể — không cần computed column + index như trước.

Smart Performance Engine

Optimized Locking: chỉ lock row-level, không lock escalation. LAQ (Lock After Qualification): lọc trước — lock sau. PSPO (Parameter Sensitive Plan Optimization): cache nhiều plan cho cùng một query theo parameter khác nhau. OPPO (Optional Parameter Plan Optimization): tự chọn plan tối ưu theo runtime value. Batch Mode cho built-in functions (ABS, SIN, DATE_TRUNC) — nhanh hơn ~70% với CPU-bound workload. ZSTD backup compression — nén nhanh và nhỏ hơn.

GitHub Copilot trong SSMS 22

Copilot GA ngày 11/11/2025 — natural language → T-SQL, lệnh /fix sửa lỗi query, /explain giải thích execution plan, /doc sinh documentation. SSMS 22.2.1 (tháng 1/2026) có autocompletion ngữ cảnh database — gợi ý column, table, join thông minh. Azure Data Studio đang bị khai tử, phát triển dồn về SSMS 22 + VS Code extension.

Editions nâng cấp mạnh

Express Edition: 50GB (từ 10GB) — gấp 5 lần, bao gồm tất cả tính năng mới. Standard Edition: 32 CPU cores, 256GB memory. Standard Developer Edition mới — khớp production Standard hơn khi dev. Web Edition bị loại bỏ (dừng SPLA). Không tăng giá ít nhất đến 2027. Power BI Report Server tích hợp sẵn trong mọi edition (trừ Express).
Câu phỏng vấn:"DiskANN index khác gì so với HNSW?"
DiskANN lưu index trên SSD thay vì RAM — tiết kiệm ~90% bộ nhớ, vẫn truy vấn millisecond. Phù hợp khi vector dataset lớn (hàng trăm triệu vector) không thể nhét vừa RAM. HNSW (Hierarchical Navigable Small World) vẫn nhanh hơn ở dataset nhỏ nằm hoàn toàn trong RAM.

Các editions

EditionCPURAMDB SizeDùng cho
DeveloperKhông giới hạnKhông giới hạnKhông giới hạnDev cá nhân — miễn phí, đầy đủ feature như Enterprise. Không dùng production.
Express4 cores / 1 socket2 GB50 GBFree, học tập, app nhỏ. 2025: 50GB (x5 so với trước), gồm tất cả feature mới.
Standard Developer32 cores256 GB524 PBDev-to-prod matching với Standard. Mới từ 2025.
Standard32 cores256 GB524 PBSME, production vừa và nhỏ.
EnterpriseKhông giới hạnKhông giới hạnKhông giới hạnProduction lớn. Có Always On AG, columnstore, partitioning đầy đủ.
Azure SQLManagedManagedManagedManaged cloud (PaaS).
Học thì dùng gì?Developer Edition (miễn phí, full feature) chạy local hoặc qua Docker. Trước đây Express 10GB hơi chật — giờ Express 50GB thoải mái cho hầu hết project cá nhân, nhưng vẫn thiếu một số Enterprise feature (Always On AG, partitioning). Nếu cần dev giống production Standard → dùng Standard Developer Edition mới.
Web Edition đã bị loại bỏ trong SQL Server 2025. Nếu đang chạy Web Edition trên phiên bản cũ, cần migrate lên Standard hoặc Azure SQL khi nâng cấp.

2. Cài đặt — 3 cách

Cách 1 (khuyên dùng) — Docker

Nhanh, gọn, dễ xoá. Image chính thức của Microsoft chạy được cả Windows / macOS / Linux:

docker run -e "ACCEPT_EULA=Y" \
           -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" \
           -e "MSSQL_PID=Developer" \
           -p 1433:1433 \
           --name sql2025 \
           -d mcr.microsoft.com/mssql/server:2025-latest

Kết nối: localhost,1433 user sa, password ở trên.

Password phải mạnh — ít nhất 8 ký tự, có chữ hoa/thường/số/đặc biệt. Nếu yếu, container sẽ exit ngay.
Dùng Express Edition qua Docker: thay MSSQL_PID=Developer thành MSSQL_PID=Express. Express Edition 2025 hỗ trợ đến 50GB — thoải mái cho môi trường dev.

Docker Linux container

# SQL Server 2025 trên Linux container — nhẹ, nhanh, dễ CI/CD
docker run -e "ACCEPT_EULA=Y" \
           -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" \
           -e "MSSQL_PID=Developer" \
           -e "MSSQL_COLLATION=SQL_Latin1_General_CP1_CI_AS" \
           -p 1433:1433 \
           --name sql2025 \
           --memory=4g \
           --cpus=4 \
           -v sqldata:/var/opt/mssql \
           -d mcr.microsoft.com/mssql/server:2025-latest
Lưu ý quan trọng cho Linux container:
  • Dùng --memory--cpus để giới hạn resource — mặc định SQL Server dùng toàn bộ RAM/CPU của host.
  • Volume mount (-v) để data tồn tại sau khi xoá container.
  • MSSQL_COLLATION nên set ngay lúc tạo — không đổi được sau.
  • Linux container không hỗ trợ Windows Authentication (chỉ dùng SQL Auth).
  • SQL Server Agent bị tắt mặc định trên Linux — bật bằng docker exec sql2025 /opt/mssql/bin/mssql-conf set sqlagent.enabled true rồi restart.

Azure SQL Database

# Tạo bằng Azure CLI
az sql server create --name my-sqlserver \
    --resource-group my-rg \
    --location southeastasia \
    --admin-user sqladmin \
    --admin-password "StrongPass123!"

az sql db create --resource-group my-rg \
    --server my-sqlserver \
    --name mydb \
    --service-objective S0 \
    --compute-model Serverless \
    --min-capacity 0.5 --max-capacity 2 \
    --auto-pause-delay 60
Khi nào dùng Azure SQL vs Docker on-prem?
  • Azure SQL: auto-scale, serverless (tự pause khi không dùng → rẻ), HA built-in, backup 35 ngày tự động. Tốt cho production web app.
  • Docker on-prem: full control, dev/test, offline OK, Enterprise feature đầy đủ (Always On AG, partitioning...).
  • Hybrid: production → Azure SQL, dev/local → Docker container, CI/CD → Docker trong pipeline.
Tiêu chíDocker Linux ContainerAzure SQL Database
Setup1 dòng docker runAzure Portal / CLI
Chi phíFree (chỉ trả VM/Docker host)Pay-as-you-go, serverless rẻ hơn
HA/DRTự setup Always On AGBuilt-in, 99.995% SLA
BackupTự quản lý7-35 ngày automatic
Enterprise featureĐầy đủ (Developer Edition)Hạn chế (theo tier)
Elastic scaleKhôngHyperscale lên đến 100TB
Copilot AICần SSMS 22 connect vàoTích hợp Azure AI

Cách 3 — Installer trực tiếp trên Windows

3. Tool quản lý

ToolPlatformƯu điểm
SSMS 22 (SQL Server Management Studio)Windows onlyChính chủ Microsoft, mạnh nhất, miễn phí. Có GitHub Copilot tích hợp — natural language → T-SQL, /fix, /explain, /doc. Mặc định cho dev .NET.
VS Code + mssql extensionAllLight, nhanh. Microsoft đang đầu tư mạnh thay cho Azure Data Studio.
Azure Data StudioWin/Mac/LinuxĐang bị phase out — tính năng dần chuyển sang SSMS 22 và VS Code extension. Vẫn dùng được nhưng không còn được đầu tư phát triển.
DBeaverAllFree, đa DB, query plan visual.
JetBrains DataGripAllTrả phí, smart nhất, đa DB.
Câu phỏng vấn:"Bạn đã dùng tool gì để quản lý SQL Server?"
Đáp ngắn: SSMS 22 cho dev mạnh (có Copilot AI hỗ trợ viết/sửa SQL), VS Code + mssql extension cho cross-platform. Nói thêm bạn đã đọc execution plan qua SSMS và từng dùng Copilot /explain để hiểu plan phức tạp.

4. Kết nối lần đầu

Mở SSMS / Azure Data Studio:

Server: localhost  (hoặc localhost,1433 nếu cổng khác)
Auth:   SQL Server Authentication
Login:  sa
Pwd:    [password đã set]

Mở New Query và chạy:

SELECT @@VERSION;
-- Microsoft SQL Server 2025 (RTM) - 17.x.x ...

SELECT @@SERVERNAME, DB_NAME(), SUSER_SNAME();

5. Tạo database đầu tiên

CREATE DATABASE LearnSqlServer;
GO

USE LearnSqlServer;
GO

CREATE TABLE Greetings (
    Id   INT IDENTITY PRIMARY KEY,
    Text NVARCHAR(200) NOT NULL,
    CreatedAt DATETIME2 DEFAULT SYSUTCDATETIME()
);

INSERT INTO Greetings (Text) VALUES (N'Xin chào SQL Server 2025!');

SELECT * FROM Greetings;
  • GO trong SSMS/sqlcmd là batch separator (không phải T-SQL chuẩn). Báo tool gửi batch trước nó lên server.
  • IDENTITY ≈ auto-increment. IDENTITY(1, 1) (default) start 1, bước 1.
  • NVARCHAR cho Unicode (tiếng Việt). VARCHAR chỉ ASCII.
  • DATETIME2 chính xác hơn DATETIME (đến 100ns), nên dùng cho mọi case mới.

6. Cấu hình cơ bản nên biết

Đổi default schema

ALTER USER sa WITH DEFAULT_SCHEMA = dbo;

Bật query store (theo dõi plan)

ALTER DATABASE LearnSqlServer
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);

Set collation phù hợp tiếng Việt

-- Khi tạo DB
CREATE DATABASE LearnSqlServer
COLLATE Vietnamese_CI_AS;     -- CI = case insensitive, AS = accent sensitive

-- Đổi sau
ALTER DATABASE LearnSqlServer
COLLATE Vietnamese_CI_AS;
Câu hỏi phỏng vấn:"Khác biệt giữa Collation CI_ASCS_AS?"
  • CI = Case Insensitive — 'abc' = 'ABC'.
  • CS = Case Sensitive — 'abc' <> 'ABC'.
  • AS = Accent Sensitive — 'a' <> 'á'.
  • AI = Accent Insensitive — 'a' = 'á'.

7. Đặc thù SQL Server cần biết ngay

  1. Identifier [] thay vì "" của ANSI. Ví dụ [Order], [Group].
  2. String literal: N'tiếng Việt' cho Unicode, 'ascii' cho ASCII.
  3. GO chỉ là batch separator của tool, không phải SQL.
  4. TOP N thay vì LIMIT N: SELECT TOP 10 * FROM Users.
  5. @@ = system variable: @@ROWCOUNT, @@IDENTITY, @@VERSION.
  6. Multi-statement: ngăn bằng ; — bắt buộc trước CTE và một số statement.

8. SQL Server 2025 — tính năng mới nổi bật cho phỏng vấn

AI & Vector — deep dive

Tính năngMô tảGhi chú phỏng vấn
VECTOR(n)Native vector type, tối đa 2000 chiềuOpenAI text-embedding-3-small = 1536 dims — vừa khít. Không cần vector DB riêng.
DiskANN indexIndex vector trên SSD, millisecond latencyTiết kiệm 90% RAM so với HNSW. Phù hợp dataset >100M vectors.
VECTOR_DISTANCE4 metric: cosine, euclidean, manhattan, dotcosine phổ biến nhất cho semantic search.
VECTOR_SEARCHSimilarity search với top-KTương đương ORDER BY distance LIMIT K trên vector DB.
sp_invoke_external_rest_endpointGọi REST API từ T-SQLGọi OpenAI, Qwen, hoặc bất kỳ endpoint nào — tạo embedding, chat completion, ... ngay trong SQL.
CREATE EXTERNAL MODELĐăng ký model AI như database objectCREATE EXTERNAL MODEL gpt4 ... rồi gọi qua stored procedure.
RAG in-databaseFull pipeline: chunk → embed → search → generateKhông cần middleware. Toàn bộ pipeline chạy trong SQL Server.

Optimized Locking — deep dive

Câu phỏng vấn:"Optimized Locking trong SQL Server 2025 là gì?"Optimized Locking là cơ chế lock mới của SQL Server 2025, mặc định bật trên mọi database mới:
  1. Chỉ lock row-level — không bao giờ escalate lên page lock hay table lock.
  2. LAQ (Lock After Qualification) — engine lọc row theo WHERE clause trước, rồi mới lock những row thỏa điều kiện. Khác với cơ chế cũ: lock tất cả row đọc qua rồi mới lọc.
  3. Kết quả: giảm blocking đáng kể, đặc biệt với OLTP workload có nhiều concurrent transaction update/từng row khác nhau.
Đây là thay đổi cực lớn về locking strategy — tồn tại từ SQL Server 7.0 đến giờ mới được viết lại.

PSPO & OPPO — giải bài parameter sniffing

Cơ chếViết tắtCách hoạt động
PSPOParameter Sensitive Plan OptimizationCache nhiều plan cho cùng một query, mỗi plan tối ưu cho một khoảng parameter khác nhau. Runtime chọn plan phù hợp dựa trên giá trị thực tế.
OPPOOptional Parameter Plan OptimizationVới parameter optional (có giá trị NULL), optimizer tự chọn giữa plan "có filter" và "không filter" dựa trên việc parameter có được truyền vào hay không.
Cả PSPO và OPPO đều là database-scoped configuration, bật/tắt qua ALTER DATABASE SCOPED CONFIGURATION.

Native JSON — so sánh với cách cũ

Khía cạnhSQL Server 2022 (cũ)SQL Server 2025 (mới)
Kiểu dữ liệuNVARCHAR(MAX) — text storageJSONbinary storage, native type
Dung lượngLớn (text encoding)Tiết kiệm ~50%
Kích thước tối đa2GB (NVARCHAR(MAX) limit)2GB (JSON document)
Update một phầnViết lại toàn bộ document.modify() — in-place partial update
AggregateThủ công qua FOR JSON PATHJSON_ARRAYAGG(), JSON_OBJECTAGG()
Tìm kiếmJSON_VALUE() / JSON_QUERY()Thêm JSON_CONTAINS()
IndexComputed column + index thủ côngJSON Index trên path cụ thể
Câu phỏng vấn:"Khi nào dùng JSON column thay vì normalized table?"Dùng JSON column khi:
  • Schema linh hoạt / thay đổi thường xuyên (ví dụ: product attributes khác nhau theo category)
  • Đọc toàn bộ document một lần (không cần join)
  • Dữ liệu hierarchical / nested tự nhiên
Dùng normalized table khi:
  • Cần query theo từng field riêng biệt thường xuyên (WHERE, JOIN)
  • Cần referential integrity (FK)
  • Dữ liệu flat, không nested

© 2026 .NET Fresher Guide. All rights reserved.

Về Trang Web

Hướng dẫn toàn diện để chuẩn bị phỏng vấn vị trí .NET Fresher với nội dung từ lý thuyết đến thực hành.