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ự án và chuyển đổi nhanh khi qua dự án dùng DB khác.
1. Khung tổng quát
| Tiêu chí | SQL Server 2025 | PostgreSQL 19 | MySQL 9.7 / 8.4 |
|---|---|---|---|
| License | Thương mại (Express free, 50GB) | PostgreSQL License (free) | GPL / commercial |
| Owner | Microsoft | Cộng đồng (PGDG) | Oracle |
| Latest | 17.x (11/2025) | 19 Beta (06/2026) | 9.7 LTS (04/2026), 8.4 LTS |
| Cross-platform | Win + Linux + Docker | Tất cả | Tất cả |
| Default storage | (page-based) | (page-based) | InnoDB |
| Standard SQL compliance | Cao | Cao nhất | Vừa |
| Mã nguồn mở | ❌ | ✅ | ✅ Community / ❌ Enterprise |
| Compiler / Engine | C++ native | Go (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 Server | Postgres | MySQL | |
|---|---|---|---|
| Quote identifier | [Name] hoặc "Name" | "Name" | `Name` |
| String literal | N'unicode' / 'ascii' | 'utf-8' | 'utf-8' |
| Concat | + hoặc CONCAT() | ` | |
| Cast | CAST(x AS INT), CONVERT(INT, x) | x::INT, CAST(...) | CAST(...), CONVERT(x, UNSIGNED) |
| Comment | -- hoặc /* */ | giống | giống |
Data type
| SQL Server | Postgres | MySQL | |
|---|---|---|---|
| Unicode string | NVARCHAR(n) | TEXT / VARCHAR(n) (utf-8) | VARCHAR(n) CHARSET utf8mb4 |
| Long text | NVARCHAR(MAX) | TEXT | LONGTEXT |
| Boolean | BIT | BOOLEAN | TINYINT(1) |
| Auto-id | INT IDENTITY | BIGSERIAL / GENERATED AS IDENTITY | BIGINT AUTO_INCREMENT |
| Timestamp w/ tz | DATETIMEOFFSET | TIMESTAMPTZ | TIMESTAMP |
| Timestamp wo/ tz | DATETIME2 | TIMESTAMP | DATETIME |
| UUID | UNIQUEIDENTIFIER | UUID (built-in) | BINARY(16) hoặc CHAR(36) |
| JSON | JSON (2025, first-class native) | JSONB (recommended) | JSON |
| Array | ❌ (XML hoặc JSON) | ✅ Native | ❌ (JSON thay) |
| Vector (AI) | VECTOR(n) (2025, native) | Extension pgvector | ❌ |
| RegEx | REGEXP_LIKE, REGEXP_REPLACE... (2025) | ~, SIMILAR TO, REGEXP_REPLACE... | REGEXP, REGEXP_REPLACE... |
Function tương đương
| Mục đích | SQL Server | Postgres | MySQL |
|---|---|---|---|
| Now | SYSUTCDATETIME(), GETDATE() | NOW(), CURRENT_TIMESTAMP | NOW(), UTC_TIMESTAMP() |
| Add interval | DATEADD(DAY, 7, d) | d + INTERVAL '7 days' | DATE_ADD(d, INTERVAL 7 DAY) |
| Diff | DATEDIFF(DAY, a, b) | b - a | DATEDIFF(b, a) |
| Year | YEAR(d), DATEPART(YEAR, d) | EXTRACT(YEAR FROM d) | YEAR(d) |
| Format | FORMAT(d, 'yyyy-MM-dd') | TO_CHAR(d, 'YYYY-MM-DD') | DATE_FORMAT(d, '%Y-%m-%d') |
| String length | LEN(s) | LENGTH(s), CHAR_LENGTH(s) | CHAR_LENGTH(s) |
| Substring | SUBSTRING(s, 1, 3) | SUBSTRING(s FROM 1 FOR 3) | SUBSTRING(s, 1, 3) |
| NULL replace | ISNULL(x, 'default'), COALESCE | COALESCE(x, 'default') | IFNULL(x, 'default'), COALESCE |
| RegEx match | REGEXP_LIKE(s, pattern) | s ~ pattern | s REGEXP pattern |
| UUID generate | NEWID() (v4), NEWSEQUENTIALID() | uuidv7() (PG 18+) / gen_random_uuid() | UUID() |
DML
| SQL Server | Postgres | MySQL | |
|---|---|---|---|
| LIMIT | TOP N, OFFSET..FETCH | LIMIT N OFFSET M | LIMIT N OFFSET M |
| UPSERT | MERGE | ON CONFLICT DO UPDATE / DO SELECT (PG 19) | ON DUPLICATE KEY UPDATE |
| Returning | OUTPUT INSERTED.* | RETURNING * / OLD/NEW (PG 18+) | SELECT LAST_INSERT_ID() |
| FULL OUTER JOIN | ✅ | ✅ | ❌ (UNION mô phỏng) |
| Graph query | ❌ | ✅ SQL/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
| Feature | SQL Server | Postgres | MySQL |
|---|---|---|---|
| Window function | ✅ Full | ✅ Full (nhiều nhất) | ✅ (8.0+) |
| CTE recursive | ✅ | ✅ | ✅ (8.0+) |
| GROUPING SETS / ROLLUP / CUBE | ✅ | ✅ | ROLLUP only |
| Materialized View | ❌ (Indexed View) | ✅ | ❌ |
| Partial index | ❌ (Filtered Index) | ✅ | ❌ |
| Functional index | Computed col PERSISTED | ✅ Expression index | ✅ (8.0.13+) |
| Native JSON path index | ✅ (2025, JSON index) | ✅ GIN | ✅ (functional index) |
| Native UUID | UNIQUEIDENTIFIER | UUID + 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 query | ❌ | ✅ SQL/PGQ (PG 19) | ❌ |
| Temporal table | ✅ System-versioned | ✅ (18+ constraints, 19+ FOR PORTION OF) | ❌ |
| Native RegEx | ✅ (2025, 6 functions) | ✅ POSIX ~ + SIMILAR TO | ✅ REGEXP, 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 Guide | ✅ pg_plan_advice (PG 19) | ✅ Index hints, Optimizer hints |
| Parallel vacuum | ❌ | ✅ Parallel Autovacuum (PG 19) | ❌ |
| Hypergraph Optimizer | ❌ | ❌ (PG có GEQO) | ✅ DPhyp (9.7 Community!) |
5. Concurrency & transaction
| SQL Server | Postgres | MySQL (InnoDB) | |
|---|---|---|---|
| MVCC | Optional (SNAPSHOT) | Native (default) | Native (default) |
| Default isolation | Read Committed (lock) | Read Committed (MVCC) | Repeatable Read |
| Phantom read trong RR | Có | Không (snapshot) | Không (gap lock) |
| Serializable | Strict lock | SSI (optimistic) | Strict lock |
| Read block write | Mặc định có | Không (MVCC) | Không (MVCC) |
| Lock granularity | Row / page / table | Row | Row + 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 Server | Postgres | MySQL | |
|---|---|---|---|
| Vertical scale | Tốt | Rất tốt | Tốt |
| Horizontal scale (write) | Always On AG | Citus / sharding app-level | Group Replication, Vitess |
| Read replica | Always On readable | Streaming replication | Source/Replica |
| Connection pool built-in | ❌ (cần dùng pool ngoài) | ❌ (PgBouncer) | ❌ (ProxySQL) |
| Columnstore | ✅ Built-in | Extension (Citus, hydra) | ❌ |
| Partition | ✅ | ✅ Declarative (10+) | ✅ |
| Analytics performance | ✅ Columnstore | OK + extension | OK |
| Realtime CDC | ✅ (2025: Event Hubs/Kafka) | Logical replication, Debezium | Binlog, 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 rebuild | ❌ | ✅ REPACK CONCURRENTLY (19) | ❌ |
| Parallel vacuum | ❌ | ✅ Autovacuum parallel (19) | ❌ |
7. Tool ecosystem
| SQL Server | Postgres | MySQL | |
|---|---|---|---|
| Official GUI | SSMS, Azure Data Studio | pgAdmin | MySQL Workbench |
| Best 3rd-party | DataGrip, dbForge | DataGrip, DBeaver, TablePlus | DataGrip, DBeaver |
| CLI | sqlcmd | psql (rất mạnh) | mysql |
| Migration tool | Liquibase, Flyway, EF Core | Liquibase, Flyway, sqlx, Knex | Liquibase, Flyway, Knex |
| Backup tool | Built-in | pg_dump, pg_basebackup | mysqldump, XtraBackup |
8. Cloud managed offering
| Provider | SQL Server | Postgres | MySQL |
|---|---|---|---|
| AWS | RDS for SQL Server | RDS, Aurora PostgreSQL | RDS, Aurora MySQL |
| Azure | Azure SQL DB (PaaS), SQL MI | Database for PostgreSQL | Database for MySQL |
| Google Cloud | Cloud SQL | Cloud SQL, AlloyDB | Cloud SQL |
| Modern | – | Supabase, Neon, Crunchy, Tembo | PlanetScale, Aiven, TiDB |
| AI-native | Azure SQL Hyperscale + Copilot | Neon (serverless), Supabase (RAG) | – |
| Hybrid mgmt | Azure Arc (on-prem → cloud) | – | – |
| Fabric-native | SQL Database in Fabric (SaaS) | – | – |
9. Pricing rough
| Dev / nhỏ | Production | |
|---|---|---|
| SQL Server | Free (Express 50GB, Developer full-feature) | $$$ Standard/Enterprise license |
| Postgres | Free | Free (chỉ trả hosting) |
| MySQL | Free Community | Free 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):
- "3 DB này khác isolation level mặc định thế nào?"
- "Khác biệt JSONB Postgres, JSON MySQL, và native JSON SQL Server 2025?"
- "Postgres MVCC khác InnoDB MVCC ở đâu? SQL Server có MVCC không?"
- "UPSERT trong 3 DB? ON CONFLICT DO SELECT (PG 19) để làm gì?"
- "DB nào dùng cho AI/RAG? So sánh VECTOR (SQL Server) vs pgvector (Postgres)?"
- "DB nào dùng cho banking core? Vì sao?"
- "Schema/Database hierarchy 3 DB khác nhau ra sao?"
- "DB nào có graph query native?" → PostgreSQL 19 (SQL/PGQ).
- "DB nào có array type native?" → Chỉ Postgres.
- "3 DB này có Materialized View không?" → Chỉ Postgres native.
- "Hypergraph Optimizer (MySQL 9.7) khác gì optimizer thường?"
- "SQL Server 2025 Optimized Locking giải quyết vấn đề gì?"
- "REPACK CONCURRENTLY (PG 19) dùng thay VACUUM FULL khi nào?"
- "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?
- 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.
- 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.
- 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, batchGO). 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.
Đó 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.