Database

So sánh SQL Server vs PostgreSQL vs MySQL

So sánh chi tiết 3 RDBMS phổ biến — feature, performance, use case, syntax difference. Bảng tham chiếu cuối khi đã học cả 3.
Trang này tổng hợp khác biệt giữa 3 RDBMS để bạn chọn đúng cho dự ánchuyển đổi nhanh khi qua dự án dùng DB khác.

1. Khung tổng quát

Tiêu chíSQL Server 2025PostgreSQL 19MySQL 9.7 / 8.4
LicenseThương mại (Express free, 50GB)PostgreSQL License (free)GPL / commercial
OwnerMicrosoftCộng đồng (PGDG)Oracle
Latest17.x (11/2025)19 Beta (06/2026)9.7 LTS (04/2026), 8.4 LTS
Cross-platformWin + Linux + DockerTất cảTất cả
Default storage(page-based)(page-based)InnoDB
Standard SQL complianceCaoCao nhấtVừa
Mã nguồn mở✅ Community / ❌ Enterprise
Compiler / EngineC++ nativeGo (TS 7-style rewrite PG 19)C++ native
AI/Vector built-in✅ VECTOR + DiskANN (2025)✅ pgvector extension❌ (HeatWave riêng)

2. Khi nào chọn cái nào?

SQL Server hợp khi…

  • Stack .NET / Microsoft ecosystem.
  • Cần AI/Vector built-in (VECTOR + DiskANN, RAG trong DB).
  • Native RegEx + JSON trong T-SQL không cần CLR.
  • Banking, insurance VN (đã đầu tư SQL Server từ lâu).
  • Cần BI / SSIS / SSAS / Power BI Report Server.
  • Express Edition 50GB miễn phí — đủ cho project nhỏ.
  • Copilot trong SSMS 22 — NL → T-SQL.
  • On-prem Windows hoặc hybrid Azure Arc.

PostgreSQL hợp khi…

  • Stack Node.js, Python, Go, modern web.
  • Open-source first, không lock vendor.
  • SQL/PGQ graph queries (PG 19) — graph trên table có sẵn.
  • ON CONFLICT DO SELECT — atomic get-or-create (PG 19).
  • Cần JSONB nặng (CMS, event store).
  • Cần GIS (PostGIS).
  • Cần AI / vector search (pgvector).
  • Cần extension system mạnh (pg_trgm, postgis, timescaledb…).
  • Startup / scale-up cần linh hoạt, free hoàn toàn.

MySQL hợp khi…

  • Stack LAMP, PHP/Laravel, WordPress.
  • Hypergraph Optimizer trong Community (9.7) — JOIN nhanh 2-5×.
  • In-database JavaScript (9.7) — stored procedure bằng JS.
  • E-commerce nhẹ (Magento, WooCommerce).
  • Cần ecosystem hosting đa dạng nhất.
  • Team đã quen, dev nhanh.
  • Cần MySQL-compatible cloud (PlanetScale, RDS, Aurora).

3. Syntax — cheat sheet chuyển đổi

Identifier & string

SQL ServerPostgresMySQL
Quote identifier[Name] hoặc "Name""Name"`Name`
String literalN'unicode' / 'ascii''utf-8''utf-8'
Concat+ hoặc CONCAT()`
CastCAST(x AS INT), CONVERT(INT, x)x::INT, CAST(...)CAST(...), CONVERT(x, UNSIGNED)
Comment-- hoặc /* */giốnggiống

Data type

SQL ServerPostgresMySQL
Unicode stringNVARCHAR(n)TEXT / VARCHAR(n) (utf-8)VARCHAR(n) CHARSET utf8mb4
Long textNVARCHAR(MAX)TEXTLONGTEXT
BooleanBITBOOLEANTINYINT(1)
Auto-idINT IDENTITYBIGSERIAL / GENERATED AS IDENTITYBIGINT AUTO_INCREMENT
Timestamp w/ tzDATETIMEOFFSETTIMESTAMPTZTIMESTAMP
Timestamp wo/ tzDATETIME2TIMESTAMPDATETIME
UUIDUNIQUEIDENTIFIERUUID (built-in)BINARY(16) hoặc CHAR(36)
JSONJSON (2025, first-class native)JSONB (recommended)JSON
Array❌ (XML hoặc JSON)✅ Native❌ (JSON thay)
Vector (AI)VECTOR(n) (2025, native)Extension pgvector
RegExREGEXP_LIKE, REGEXP_REPLACE... (2025)~, SIMILAR TO, REGEXP_REPLACE...REGEXP, REGEXP_REPLACE...

Function tương đương

Mục đíchSQL ServerPostgresMySQL
NowSYSUTCDATETIME(), GETDATE()NOW(), CURRENT_TIMESTAMPNOW(), UTC_TIMESTAMP()
Add intervalDATEADD(DAY, 7, d)d + INTERVAL '7 days'DATE_ADD(d, INTERVAL 7 DAY)
DiffDATEDIFF(DAY, a, b)b - aDATEDIFF(b, a)
YearYEAR(d), DATEPART(YEAR, d)EXTRACT(YEAR FROM d)YEAR(d)
FormatFORMAT(d, 'yyyy-MM-dd')TO_CHAR(d, 'YYYY-MM-DD')DATE_FORMAT(d, '%Y-%m-%d')
String lengthLEN(s)LENGTH(s), CHAR_LENGTH(s)CHAR_LENGTH(s)
SubstringSUBSTRING(s, 1, 3)SUBSTRING(s FROM 1 FOR 3)SUBSTRING(s, 1, 3)
NULL replaceISNULL(x, 'default'), COALESCECOALESCE(x, 'default')IFNULL(x, 'default'), COALESCE
RegEx matchREGEXP_LIKE(s, pattern)s ~ patterns REGEXP pattern
UUID generateNEWID() (v4), NEWSEQUENTIALID()uuidv7() (PG 18+) / gen_random_uuid()UUID()

DML

SQL ServerPostgresMySQL
LIMITTOP N, OFFSET..FETCHLIMIT N OFFSET MLIMIT N OFFSET M
UPSERTMERGEON CONFLICT DO UPDATE / DO SELECT (PG 19)ON DUPLICATE KEY UPDATE
ReturningOUTPUT INSERTED.*RETURNING * / OLD/NEW (PG 18+)SELECT LAST_INSERT_ID()
FULL OUTER JOIN❌ (UNION mô phỏng)
Graph querySQL/PGQ (PG 19)
GROUP BY ALL❌ (chỉ PG 19)

Update/Delete với JOIN

-- SQL Server
UPDATE p SET p.cat_name = c.name
FROM Products p JOIN Categories c ON c.Id = p.CatId;

-- Postgres
UPDATE products p SET cat_name = c.name
FROM categories c WHERE c.id = p.cat_id;

-- MySQL
UPDATE products p JOIN categories c ON c.id = p.cat_id
SET p.cat_name = c.name;

4. Feature comparison

FeatureSQL ServerPostgresMySQL
Window function✅ Full✅ Full (nhiều nhất)✅ (8.0+)
CTE recursive✅ (8.0+)
GROUPING SETS / ROLLUP / CUBEROLLUP only
Materialized View❌ (Indexed View)
Partial index❌ (Filtered Index)
Functional indexComputed col PERSISTED✅ Expression index✅ (8.0.13+)
Native JSON path index✅ (2025, JSON index)✅ GIN✅ (functional index)
Native UUIDUNIQUEIDENTIFIERUUID + uuidv7() (18+)BINARY(16)/CHAR(36)
Array type✅ Native
Range type
Full-text search✅ built-in✅ tsvector + GIN✅ built-in (InnoDB)
Vector search (AI)VECTOR + DiskANN (2025)✅ pgvector extension❌ (HeatWave riêng)
Graph querySQL/PGQ (PG 19)
Temporal table✅ System-versioned✅ (18+ constraints, 19+ FOR PORTION OF)
Native RegEx✅ (2025, 6 functions)✅ POSIX ~ + SIMILAR TOREGEXP, REGEXP_REPLACE
MERGE✅ (15+)
Stored procedure✅ T-SQL✅ PL/pgSQL (11+)
In-database JS/Python✅ R, Python (MLS)✅ PL/Python, PL/Perl…JavaScript (9.7)
Online table rebuild❌ (cần manual)REPACK CONCURRENTLY (PG 19)
Atomic get-or-create❌ (MERGE workaround)ON CONFLICT DO SELECT (PG 19)
Plan hints✅ Query hints, Plan Guidepg_plan_advice (PG 19)✅ Index hints, Optimizer hints
Parallel vacuumParallel Autovacuum (PG 19)
Hypergraph Optimizer❌ (PG có GEQO)DPhyp (9.7 Community!)

5. Concurrency & transaction

SQL ServerPostgresMySQL (InnoDB)
MVCCOptional (SNAPSHOT)Native (default)Native (default)
Default isolationRead Committed (lock)Read Committed (MVCC)Repeatable Read
Phantom read trong RRKhông (snapshot)Không (gap lock)
SerializableStrict lockSSI (optimistic)Strict lock
Read block writeMặc định cóKhông (MVCC)Không (MVCC)
Lock granularityRow / page / tableRowRow + gap
Câu PV cốt lõi:"3 DB này khác nhau về isolation thế nào?"

"SQL Server 2025 default Read Committed dùng lock — đọc block ghi (trừ khi bật RCSI). Azure SQL Hyperscale bật RCSI mặc định. Postgres và MySQL dùng MVCC — đọc không block ghi. Default isolation MySQL cao hơn — Repeatable Read (vs Read Committed của SQL Server và Postgres) vì lý do replication. Postgres Repeatable Read dùng snapshot toàn transaction → bao luôn phantom. MySQL Repeatable Read dùng gap lock cho mục đích tương tự. SQL Server 2025 Optimized Locking giảm lock escalation → row-level lock mượt hơn."

6. Performance & scale

SQL ServerPostgresMySQL
Vertical scaleTốtRất tốtTốt
Horizontal scale (write)Always On AGCitus / sharding app-levelGroup Replication, Vitess
Read replicaAlways On readableStreaming replicationSource/Replica
Connection pool built-in❌ (cần dùng pool ngoài)❌ (PgBouncer)❌ (ProxySQL)
Columnstore✅ Built-inExtension (Citus, hydra)
Partition✅ Declarative (10+)
Analytics performance✅ ColumnstoreOK + extensionOK
Realtime CDC✅ (2025: Event Hubs/Kafka)Logical replication, DebeziumBinlog, Debezium
Optimized Locking✅ (2025: no escalation, LAQ)❌ (MVCC — không cần)❌ (MVCC — không cần)
AI-augmented optimizer✅ CE Feedback (2025)✅ Hypergraph DPhyp (9.7)
Online table rebuildREPACK CONCURRENTLY (19)
Parallel vacuumAutovacuum parallel (19)

7. Tool ecosystem

SQL ServerPostgresMySQL
Official GUISSMS, Azure Data StudiopgAdminMySQL Workbench
Best 3rd-partyDataGrip, dbForgeDataGrip, DBeaver, TablePlusDataGrip, DBeaver
CLIsqlcmdpsql (rất mạnh)mysql
Migration toolLiquibase, Flyway, EF CoreLiquibase, Flyway, sqlx, KnexLiquibase, Flyway, Knex
Backup toolBuilt-inpg_dump, pg_basebackupmysqldump, XtraBackup

8. Cloud managed offering

ProviderSQL ServerPostgresMySQL
AWSRDS for SQL ServerRDS, Aurora PostgreSQLRDS, Aurora MySQL
AzureAzure SQL DB (PaaS), SQL MIDatabase for PostgreSQLDatabase for MySQL
Google CloudCloud SQLCloud SQL, AlloyDBCloud SQL
ModernSupabase, Neon, Crunchy, TemboPlanetScale, Aiven, TiDB
AI-nativeAzure SQL Hyperscale + CopilotNeon (serverless), Supabase (RAG)
Hybrid mgmtAzure Arc (on-prem → cloud)
Fabric-nativeSQL Database in Fabric (SaaS)

9. Pricing rough

Dev / nhỏProduction
SQL ServerFree (Express 50GB, Developer full-feature)$$$ Standard/Enterprise license
PostgresFreeFree (chỉ trả hosting)
MySQLFree CommunityFree Community / $$ Enterprise

10. Câu hỏi PV thường gặp — 3 DB

Câu PV trộn 3 DB hay được hỏi (cập nhật 2026):
  1. "3 DB này khác isolation level mặc định thế nào?"
  2. "Khác biệt JSONB Postgres, JSON MySQL, và native JSON SQL Server 2025?"
  3. "Postgres MVCC khác InnoDB MVCC ở đâu? SQL Server có MVCC không?"
  4. "UPSERT trong 3 DB? ON CONFLICT DO SELECT (PG 19) để làm gì?"
  5. "DB nào dùng cho AI/RAG? So sánh VECTOR (SQL Server) vs pgvector (Postgres)?"
  6. "DB nào dùng cho banking core? Vì sao?"
  7. "Schema/Database hierarchy 3 DB khác nhau ra sao?"
  8. "DB nào có graph query native?" → PostgreSQL 19 (SQL/PGQ).
  9. "DB nào có array type native?" → Chỉ Postgres.
  10. "3 DB này có Materialized View không?" → Chỉ Postgres native.
  11. "Hypergraph Optimizer (MySQL 9.7) khác gì optimizer thường?"
  12. "SQL Server 2025 Optimized Locking giải quyết vấn đề gì?"
  13. "REPACK CONCURRENTLY (PG 19) dùng thay VACUUM FULL khi nào?"
  14. "Express Edition 2025 khác gì bản cũ?" → 50GB (gấp 5×).

11. Recommend cho fresher / junior

Học theo thứ tự nào nếu chưa biết SQL?
  1. PostgreSQL trước — cú pháp chuẩn ANSI nhất, tài liệu tốt, free hoàn toàn. PG 19 có SQL/PGQ, DO SELECT, REPACK — feature đầy đủ nhất trong các RDBMS open-source.
  2. Sau đó MySQL — nhẹ hơn, đơn giản hơn. Đọc hiểu được gap lock, AUTO_INCREMENT, ON DUPLICATE KEY là đủ cho大部分 job PHP/web.
  3. Cuối cùng SQL Server nếu công việc cần — T-SQL có khá nhiều đặc thù ([], N'...', IDENTITY, MERGE, OUTPUT, batch GO). SQL Server 2025 thêm VECTOR, native JSON, RegEx, Copilot — bạn sẽ có lợi thế nếu biết các tính năng này.
Một cách khác: học theo công việc — nếu nhận job .NET banking thì học SQL Server trước. Nếu startup Node.js thì PostgreSQL. Nếu WordPress/PHP thì MySQL.
Đó là kết thúc section Database. Quay lại Tự học để xem chủ đề tiếp theo, hoặc Phỏng vấn .NET để ôn luyện riêng cho fresher .NET.

© 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.