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.
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
| Edition | CPU | RAM | DB Size | Dùng cho |
|---|---|---|---|---|
| Developer | Không giới hạn | Không giới hạn | Không giới hạn | Dev cá nhân — miễn phí, đầy đủ feature như Enterprise. Không dùng production. |
| Express | 4 cores / 1 socket | 2 GB | 50 GB | Free, học tập, app nhỏ. 2025: 50GB (x5 so với trước), gồm tất cả feature mới. |
| Standard Developer | 32 cores | 256 GB | 524 PB | Dev-to-prod matching với Standard. Mới từ 2025. |
| Standard | 32 cores | 256 GB | 524 PB | SME, production vừa và nhỏ. |
| Enterprise | Không giới hạn | Không giới hạn | Không giới hạn | Production lớn. Có Always On AG, columnstore, partitioning đầy đủ. |
| Azure SQL | Managed | Managed | Managed | Managed 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
--memoryvà--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_COLLATIONnê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 truerồ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 Container | Azure SQL Database |
|---|---|---|
| Setup | 1 dòng docker run | Azure Portal / CLI |
| Chi phí | Free (chỉ trả VM/Docker host) | Pay-as-you-go, serverless rẻ hơn |
| HA/DR | Tự setup Always On AG | Built-in, 99.995% SLA |
| Backup | Tự quản lý | 7-35 ngày automatic |
| Enterprise feature | Đầy đủ (Developer Edition) | Hạn chế (theo tier) |
| Elastic scale | Không | Hyperscale lên đến 100TB |
| Copilot AI | Cần SSMS 22 connect vào | Tích hợp Azure AI |
Cách 3 — Installer trực tiếp trên Windows
3. Tool quản lý
| Tool | Platform | Ưu điểm |
|---|---|---|
| SSMS 22 (SQL Server Management Studio) | Windows only | Chí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 extension | All | Light, nhanh. Microsoft đang đầu tư mạnh thay cho Azure Data Studio. |
| Azure Data Studio | Win/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. |
| DBeaver | All | Free, đa DB, query plan visual. |
| JetBrains DataGrip | All | Trả 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
Đá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;
GOtrong 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.NVARCHARcho Unicode (tiếng Việt).VARCHARchỉ ASCII.DATETIME2chính xác hơnDATETIME(đế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_AS và CS_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
- Identifier
[]thay vì""của ANSI. Ví dụ[Order],[Group]. - String literal:
N'tiếng Việt'cho Unicode,'ascii'cho ASCII. GOchỉ là batch separator của tool, không phải SQL.TOP Nthay vìLIMIT N:SELECT TOP 10 * FROM Users.@@= system variable:@@ROWCOUNT,@@IDENTITY,@@VERSION.- 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ăng | Mô tả | Ghi chú phỏng vấn |
|---|---|---|
VECTOR(n) | Native vector type, tối đa 2000 chiều | OpenAI text-embedding-3-small = 1536 dims — vừa khít. Không cần vector DB riêng. |
| DiskANN index | Index vector trên SSD, millisecond latency | Tiết kiệm 90% RAM so với HNSW. Phù hợp dataset >100M vectors. |
VECTOR_DISTANCE | 4 metric: cosine, euclidean, manhattan, dot | cosine phổ biến nhất cho semantic search. |
VECTOR_SEARCH | Similarity search với top-K | Tương đương ORDER BY distance LIMIT K trên vector DB. |
sp_invoke_external_rest_endpoint | Gọi REST API từ T-SQL | Gọ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 object | CREATE EXTERNAL MODEL gpt4 ... rồi gọi qua stored procedure. |
| RAG in-database | Full pipeline: chunk → embed → search → generate | Khô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:
- Chỉ lock row-level — không bao giờ escalate lên page lock hay table lock.
- 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.
- 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.
PSPO & OPPO — giải bài parameter sniffing
| Cơ chế | Viết tắt | Cách hoạt động |
|---|---|---|
| PSPO | Parameter Sensitive Plan Optimization | Cache 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ế. |
| OPPO | Optional Parameter Plan Optimization | Vớ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ạnh | SQL Server 2022 (cũ) | SQL Server 2025 (mới) |
|---|---|---|
| Kiểu dữ liệu | NVARCHAR(MAX) — text storage | JSON — binary storage, native type |
| Dung lượng | Lớn (text encoding) | Tiết kiệm ~50% |
| Kích thước tối đa | 2GB (NVARCHAR(MAX) limit) | 2GB (JSON document) |
| Update một phần | Viết lại toàn bộ document | .modify() — in-place partial update |
| Aggregate | Thủ công qua FOR JSON PATH | JSON_ARRAYAGG(), JSON_OBJECTAGG() |
| Tìm kiếm | JSON_VALUE() / JSON_QUERY() | Thêm JSON_CONTAINS() |
| Index | Computed column + index thủ công | JSON 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
- 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
Tiếp theo: Cú pháp T-SQL cơ bản