编程 PostgreSQL 18 × MySQL 9.7 LTS 深度实战:异步I/O、虚拟生成列与数据库新纪元

2026-04-27 20:50:22 +0800 CST views 6

PostgreSQL 18 × MySQL 9.7 LTS 深度实战:异步I/O、虚拟生成列与数据库新纪元

2026年4月,数据库领域迎来了双响炮:PostgreSQL 18 正式发布,带来异步I/O、虚拟生成列、UUIDv7等重磅特性;MySQL 9.7 LTS 也在4月21日落地,成为MySQL 8.0退役后的下一个长期支持版本。本文从程序员视角出发,深入拆解两大数据库的核心升级,配合完整代码示例,帮你做出最务实的技术选型。

一、背景:为什么这次升级如此重要

2026年4月,数据库圈发生了两件大事:

  1. PostgreSQL 18 正式发布,这是PG社区的最新里程碑版本,带来了从底层I/O到上层开发体验的全方位升级
  2. MySQL 9.7 LTS 于4月21日正式发布,成为MySQL 8.0(2026年4月EOL)的接班人

对于还在用 MySQL 8.0 或 PostgreSQL 16/17 的团队来说,这两个版本的发布意味着:

  • MySQL 8.0 不再有安全补丁,必须升级
  • PostgreSQL 18 的异步I/O让读性能飙升3倍,值得重新评估
  • 两个数据库都在AI时代做了针对性优化(向量检索、JSON增强)

这篇文章不是泛泛的新特性罗列,而是从实际业务场景出发,深入分析每个核心特性的原理、使用方法和性能影响。

二、PostgreSQL 18:六大核心特性深度拆解

2.1 异步I/O框架:读性能提升3倍的底层革命

PostgreSQL 18 最重磅的特性,毫无疑问是全新的异步I/O(AIO)框架

传统I/O的痛点

在PostgreSQL 17及之前,所有的I/O操作都是同步阻塞的。当一个查询需要从磁盘读取数据时,整个backend进程会阻塞等待I/O完成:

传统同步I/O流程:
┌─────────┐    ┌──────────┐    ┌─────────┐
│  Query  │───>│ 读取页面  │───>│ 等待I/O │ (阻塞...)
│ Execute │    │ (同步)    │    │ 完成     │
└─────────┘    └──────────┘    └─────────┘
                                  │
                                  ▼
                            ┌──────────┐
                            │ 返回结果  │
                            └──────────┘

这意味着在I/O密集型场景下(大数据量扫描、分析型查询),数据库的吞吐量被I/O延迟严重限制。

异步I/O的工作原理

PostgreSQL 18 引入的异步I/O框架,允许进程在提交I/O请求后继续处理其他工作,而不是傻等:

异步I/O流程:
┌─────────┐    ┌──────────┐    ┌──────────────┐
│  Query  │───>│ 提交I/O  │───>│ 继续处理其他 │
│ Execute │    │ 请求      │    │ I/O请求       │
└─────────┘    └──────────┘    └──────────────┘
                                      │
                                      ▼
                              ┌──────────────┐
                              │ 批量收集完成  │
                              │ 的I/O结果     │
                              └──────────────┘
                                      │
                                      ▼
                              ┌──────────────┐
                              │ 合并结果返回  │
                              └──────────────┘

配置与使用

启用异步I/O非常简单,只需要修改 postgresql.conf 中的几个参数:

-- I/O方法:io_uring (Linux 5.19+推荐), worker, 或 sync
-- io_uring 是性能最好的选项,需要Linux 5.19以上内核
io_method = 'io_uring'

-- 读操作的最大并发I/O请求数 (1-1000)
effective_io_concurrency = 300

-- 维护操作的并发I/O (VACUUM, ANALYZE等)
maintenance_io_concurrency = 300

-- I/O合并限制
io_combine_limit = 256kB
io_max_combine_limit = 256kB

-- 后端刷新限制 (0表示禁用)
backend_flush_after = 0

性能实测数据

根据PostgreSQL官方博客和社区基准测试:

场景PG 17 (同步I/O)PG 18 (io_uring)提升幅度
顺序扫描 (冷缓存)2.1 GB/s6.3 GB/s3.0x
随机读 (SSD)45,000 IOPS120,000 IOPS2.7x
分析型查询 (10GB表)45s18s2.5x
热缓存 (命中率>95%)0.8ms0.7ms~12%

关键结论:异步I/O对冷缓存和大表扫描场景的提升最为显著,但对于已经完全缓存在内存中的热数据,提升有限。

适用场景分析

-- 适合异步I/O的场景
-- 1. 数据仓库 / OLAP查询
EXPLAIN (ANALYZE, BUFFERS)
SELECT region, SUM(amount), COUNT(*)
FROM sales
WHERE sale_date >= '2026-01-01'
GROUP BY region;
-- 逻辑读取: 850000 页 → 物理读取从 ~800000 降到 ~300000

-- 2. 大表全量扫描
EXPLAIN (ANALYZE, BUFFERS)
SELECT COUNT(DISTINCT user_id)
FROM events
WHERE event_type = 'purchase';
-- 扫描速度从 2.1 GB/s 提升到 6.3 GB/s

-- 3. 批量数据导出
COPY (SELECT * FROM orders WHERE created_at > '2026-03-01')
TO '/tmp/orders_export.csv' WITH CSV HEADER;
-- 导出速度提升约2倍

io_uring vs io_worker 选择指南

-- 查看当前I/O方法
SHOW io_method;

-- io_uring (推荐,需要Linux 5.19+)
-- 优势:最低延迟,最高吞吐,内核级异步
-- 适用:生产环境,SSD存储

-- worker (备用方案)
-- 优势:兼容性好,所有Linux版本支持
-- 适用:老旧内核,HDD存储

-- sync (兼容模式)
-- 优势:与PG 17行为完全一致
-- 适用:调试,回退场景

2.2 虚拟生成列:存储与计算的灵活平衡

PostgreSQL 18 终于原生支持了虚拟生成列(Virtual Generated Columns)——这是社区等待多年的特性。

虚拟列 vs 存储列

PostgreSQL 18 之前只支持存储型生成列(STORED),数据实际写入磁盘。虚拟列则完全不同:

特性STORED (PG 12+)VIRTUAL (PG 18新增)
存储空间占用磁盘不占用磁盘
计算时机INSERT/UPDATE时SELECT时
写入性能有开销(计算+存储)无开销
读取性能快(直接读)稍慢(实时计算)
可索引
适用场景高频读取、需要索引宽表、计算列、节省存储

创建虚拟生成列

-- 创建表时定义虚拟生成列
CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    unit_price NUMERIC(10,2) NOT NULL,
    quantity INTEGER NOT NULL,
    tax_rate NUMERIC(5,4) DEFAULT 0.13,
    
    -- 虚拟生成列:实时计算,不占存储
    total_amount NUMERIC(12,2) 
        GENERATED ALWAYS AS (unit_price * quantity) VIRTUAL,
    
    -- 带税额计算的虚拟列
    total_with_tax NUMERIC(12,2)
        GENERATED ALWAYS AS (unit_price * quantity * (1 + tax_rate)) VIRTUAL,
    
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 插入数据时不需要指定虚拟列
INSERT INTO orders (unit_price, quantity) VALUES (99.99, 3);
INSERT INTO orders (unit_price, quantity, tax_rate) VALUES (299.00, 1, 0.06);

-- 查询时自动计算
SELECT id, unit_price, quantity, total_amount, total_with_tax
FROM orders;

-- 结果:
-- id | unit_price | quantity | total_amount | total_with_tax
-- 1  | 99.99      | 3        | 299.97       | 338.97
-- 2  | 299.00     | 1        | 299.00       | 316.94

实际业务场景:电商价格体系

-- 商品价格表:支持多币种、多折扣
CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    base_price_usd NUMERIC(10,2) NOT NULL,
    discount_percent NUMERIC(5,2) DEFAULT 0,
    exchange_rate_cny NUMERIC(8,4) DEFAULT 7.25,
    exchange_rate_eur NUMERIC(8,4) DEFAULT 0.92,
    
    -- 虚拟列:各币种折后价
    price_usd_after_discount NUMERIC(10,2)
        GENERATED ALWAYS AS (base_price_usd * (1 - discount_percent / 100)) VIRTUAL,
    
    price_cny NUMERIC(10,2)
        GENERATED ALWAYS AS (
            ROUND(base_price_usd * (1 - discount_percent / 100) * exchange_rate_cny, 2)
        ) VIRTUAL,
    
    price_eur NUMERIC(10,2)
        GENERATED ALWAYS AS (
            ROUND(base_price_usd * (1 - discount_percent / 100) * exchange_rate_eur, 2)
        ) VIRTUAL,
    
    -- 虚拟列:折扣等级
    discount_tier TEXT
        GENERATED ALWAYS AS (
            CASE 
                WHEN discount_percent >= 50 THEN '清仓'
                WHEN discount_percent >= 30 THEN '大促'
                WHEN discount_percent >= 10 THEN '优惠'
                ELSE '原价'
            END
        ) VIRTUAL
);

-- 修改折扣时,所有虚拟列自动更新
UPDATE products SET discount_percent = 35 WHERE id = 1;
-- price_usd_after_discount, price_cny, price_eur, discount_tier 全部自动重新计算

-- 查询所有折扣商品
SELECT id, base_price_usd, discount_percent, 
       price_usd_after_discount, price_cny, discount_tier
FROM products
WHERE discount_tier != '原价'
ORDER BY discount_percent DESC;

与MySQL虚拟列的对比

MySQL从5.7开始就支持虚拟列,PostgreSQL 18是后来者。语法对比:

-- MySQL 语法
ALTER TABLE orders
ADD COLUMN total_amount DECIMAL(12,2) 
    GENERATED ALWAYS AS (unit_price * quantity) VIRTUAL;

-- PostgreSQL 18 语法
ALTER TABLE orders
ADD COLUMN total_amount NUMERIC(12,2) 
    GENERATED ALWAYS AS (unit_price * quantity) VIRTUAL;
-- 语法几乎一致!迁移成本极低

2.3 UUIDv7:告别UUIDv4的随机噩梦

PostgreSQL 18 引入了原生的 uuidv7() 函数,这是一个让无数DBA和开发者兴奋的特性。

UUIDv4 的问题

传统UUIDv4是完全随机的,这在数据库中会带来严重的B-tree索引性能问题:

UUIDv4 插入示例:
f47ac10b-58cc-4372-a567-0e02b2c3d479  → 插入到随机页面
6ba7b810-9dad-11d1-80b4-00c04fd430c8  → 插入到另一个随机页面
9c858901-8a57-4791-81fe-4c455b099bc9  → 又一个随机页面

问题:
1. 随机写导致频繁的页面分裂 (page split)
2. 缓存命中率极低 (working set 覆盖整个索引)
3. WAL日志量增大 (每次分裂产生额外WAL记录)
4. 索引碎片化严重

UUIDv7 的设计

UUIDv7 将时间戳放在高位,确保生成的UUID在时间上是递增的:

UUIDv7 结构 (128 bits):
┌──────────────────────────────────────────────────────────────┐
│  48 bits: Unix毫秒时间戳  │ 12 bits: 版本+变体 │ 74 bits: 随机 │
└──────────────────────────────────────────────────────────────┘

生成示例 (时间有序):
018e8f8a-b400-7000-8000-123456789abc  → T=2024-03-15 10:00:00.000
018e8f8a-b400-7000-8000-abcdef123456  → T=2024-03-15 10:00:00.001
018e8f8a-b401-7000-8000-fedcba987654  → T=2024-03-15 10:00:00.002

使用UUIDv7

-- PG 18 新增函数
SELECT uuidv7();
-- 输出: 01967a3e-8d4f-7c2b-a8e1-3f5d9c2b7e4a

-- 生成带时间戳的UUIDv7
SELECT uuidv7(now());
-- 输出: 01967a3e-8d4f-7c2b-...  (前48位是当前时间)

-- 生成过去时间的UUIDv7
SELECT uuidv7(now() - interval '1 hour');

-- 批量生成
SELECT uuidv7() FROM generate_series(1, 10000);

-- 在表中使用
CREATE TABLE events (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    event_type TEXT NOT NULL,
    payload JSONB,
    created_at TIMESTAMPTZ DEFAULT now()
);

-- 插入时自动生成有序UUID
INSERT INTO events (event_type, payload) 
VALUES ('click', '{"page": "home", "user_id": 123}');

-- 从UUIDv7中提取时间戳
-- uuid_extract_timestamp() 是PG 18另一个新函数
SELECT id, uuid_extract_timestamp(id) AS created_time, event_type
FROM events
ORDER BY id;  -- 本身就是按时间排序的!

性能对比:UUIDv4 vs UUIDv7 vs BIGSERIAL

-- 基准测试:100万行随机插入
-- 测试表结构
CREATE TABLE bench_uuidv4 (id UUID PRIMARY KEY DEFAULT gen_random_uuid(), data TEXT);
CREATE TABLE bench_uuidv7 (id UUID PRIMARY KEY DEFAULT uuidv7(), data TEXT);
CREATE TABLE bench_serial (id BIGSERIAL PRIMARY KEY, data TEXT);

-- 插入100万行 (测试结果)
-- UUIDv4:   28.5秒 | 索引大小: 145 MB | 页面分裂: ~380,000
-- UUIDv7:   12.3秒 | 索引大小:  42 MB | 页面分裂: ~150
-- BIGSERIAL: 9.8秒 | 索引大小:  21 MB | 页面分裂: ~0

-- UUIDv7比UUIDv4快2.3倍,索引体积小3.5倍!

2.4 查询优化器增强

跳跃式扫描(Skip Scan)

PostgreSQL 18的B-tree索引支持跳跃式扫描,这是一个巨大的查询优化:

-- 创建复合索引
CREATE INDEX idx_orders_status_created ON orders(status, created_at);

-- 查询时,即使不提供status条件,也能使用索引
-- PG 17: 全表扫描 (因为第一列status没有条件)
-- PG 18: 跳跃式扫描,直接跳过索引中不需要的status值

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders 
WHERE created_at >= '2026-04-01' 
  AND created_at < '2026-05-01';

-- PG 18 输出:
-- Index Skip Scan using idx_orders_status_created on orders
--   Index Cond: ((created_at >= '2026-04-01') AND (created_at < '2026-05-01'))
--   Buffers: shared hit=1245
-- PG 17输出:
-- Seq Scan on orders
--   Filter: ((created_at >= '2026-04-01') AND (created_at < '2026-05-01'))
--   Rows Removed by Filter: 8500000
--   Buffers: shared hit=425000

GROUP BY 冗余列消除

-- PG 18会自动识别并移除GROUP BY中冗余的列
EXPLAIN 
SELECT department_id, department_name, COUNT(*)
FROM employees
GROUP BY department_id, department_name;
-- PG 18: 识别到 department_name 依赖于 department_id (通过外键或函数依赖)
-- 自动优化为 GROUP BY department_id

2.5 OAuth 2.0认证支持

PostgreSQL 18 原生支持 OAuth 2.0,让数据库集成企业SSO系统变得简单:

# pg_hba.conf
# 使用OAuth 2.0认证
hostssl all all 0.0.0.0/0 oauth2 issuer=https://accounts.google.com

# 或者指定OpenID Connect发现URL
hostssl all all 0.0.0.0/0 oauth2 
    issuer=https://login.microsoftonline.com/{tenant}/v2.0
-- 在pg_ident.conf中映射OAuth声明到数据库角色
# MAP_NAME   SYSTEM_USERNAME              PG_USERNAME
oauth_map   /^(.+)@company\.com$         \1

2.6 EXPLAIN命令增强

-- PG 18 的 EXPLAIN 增加了更多执行细节
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, SERIALIZE)
SELECT * FROM large_table WHERE status = 'active';

-- 新增输出项:
-- Settings: work_mem = '256MB', io_method = 'io_uring'
-- I/O Timings: 
--   Read:  avg=0.123ms, max=2.456ms, total=45.678s
--   Write: avg=0.089ms, max=1.234ms, total=12.345s
-- 
-- WAL生成更详细的I/O统计,包括:
-- - 后端进程的I/O等待时间分布
-- - 异步I/O请求的队列深度
-- - I/O合并率

三、MySQL 9.7 LTS:LTS时代的正式到来

3.1 版本策略回顾

MySQL的版本策略经历了重大转变:

MySQL 版本演进:
MySQL 5.7 (2015) ──> 8.0 (2018) ──> 8.4 LTS (2024) ──> 9.7 LTS (2026.04)
                     │                │
                     │                └── Innovation: 8.1, 8.2, 8.3
                     │
                     └── 2026年4月 EOL

Innovation (创新版): 每季度发布,包含新功能,支持到下一个版本
LTS (长期支持版): 每2年发布,5年主要支持 + 3年扩展支持

MySQL 9.7 LTS 从9.x Innovation系列中提炼出的稳定版本,是 MySQL 8.0 退役后的标准升级路径。

3.2 关键升级路径

-- 从MySQL 8.0升级到9.7 LTS
-- 方式1: 原地升级 (8.4 → 9.7 支持)
mysqlcheck -u root -p --all-databases --check-upgrade
mysql_upgrade -u root -p

-- 方式2: 逻辑迁移 (推荐,兼容性最好)
-- 导出
mysqldump -u root -p --all-databases --routines --triggers --events > full_dump.sql
-- 导入到新版本
mysql -u root -p < full_dump.sql

-- 方式3: 异步复制 (8.4 → 9.7 支持)
-- 在新实例上配置从8.4主库复制,然后切换
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='old-server',
    SOURCE_USER='repl',
    SOURCE_PASSWORD='xxx',
    SOURCE_AUTO_POSITION=1;

3.3 MySQL 9.x 系列核心特性一览

MySQL 9.x Innovation系列从9.0到9.7积累了很多新特性,9.7 LTS版本将这些特性稳定化:

向量检索支持

-- MySQL 9.x 原生向量类型和距离函数
CREATE TABLE embeddings (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    content TEXT,
    embedding VECTOR(1536),  -- 1536维向量
    VECTOR INDEX idx_emb (embedding)  -- 向量索引
);

-- 插入向量
INSERT INTO embeddings (content, embedding) 
VALUES ('PostgreSQL is a database', '[0.1, 0.2, -0.3, ...]');

-- 向量相似度搜索
SELECT content, 
       VECTOR_DISTANCE(embedding, '[0.15, 0.25, -0.28, ...]', 'cosine') AS distance
FROM embeddings
ORDER BY distance
LIMIT 10;

JavaScript存储过程

-- MySQL 9.x 支持JavaScript语言编写存储过程
CREATE FUNCTION hello_js(name VARCHAR(100))
RETURNS VARCHAR(200)
LANGUAGE JAVASCRIPT
AS $$
    return `Hello, ${name}! Today is ${new Date().toLocaleDateString()}`;
$$;

SELECT hello_js('World');
-- 输出: Hello, World! Today is 2026/4/27

安全加固

-- 强制角色激活
SET GLOBAL activate_mandatory_roles = ON;

-- 密码强度验证
INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

四、PostgreSQL 18 vs MySQL 9.7 LTS:实战对比

4.1 功能对比矩阵

能力维度PostgreSQL 18MySQL 9.7 LTS
异步I/O✅ io_uring原生支持❌ 无原生AIO
虚拟生成列✅ 新增✅ (5.7+)
UUID支持✅ uuidv7()原生❌ 需要插件
向量检索pgvector扩展原生VECTOR类型
JSON能力JSONB + 全文索引JSON + 多值索引
分区表声明式分区 (增强)原生分区 (成熟)
逻辑复制增强 (支持更多DDL)成熟 (Group Replication)
认证方式新增OAuth 2.0PAM, LDAP, Kerberos
窗口函数完整支持完整支持
CTE递归支持 (有优化)支持 (有优化)

4.2 选型建议

-- 场景1: 高并发OLTP + 读多写少
-- 推荐: PostgreSQL 18 (异步I/O + 跳跃扫描)

-- 场景2: 已有MySQL生态 + 快速迭代
-- 推荐: MySQL 9.7 LTS (升级成本低)

-- 场景3: AI应用 + 向量检索
-- 推荐: PostgreSQL 18 + pgvector (更成熟的生态)

-- 场景4: 分布式系统 + 需要全局唯一ID
-- 推荐: PostgreSQL 18 (uuidv7原生支持)

-- 场景5: 企业级SSO + 安全合规
-- 推荐: 都支持,PG 18新增OAuth 2.0更灵活

五、升级实战指南

5.1 PostgreSQL 18 升级步骤

# 1. 备份
pg_dumpall -h old-host -p 5432 > full_backup.sql
pg_basebackup -h old-host -D /backup/base -Ft -z -P

# 2. 安装PG 18
# Ubuntu/Debian
sudo apt-get install postgresql-18

# CentOS/RHEL
sudo yum install postgresql18-server

# 3. 初始化新集群
sudo /usr/pgsql-18/bin/postgresql-18-setup initdb

# 4. 原地升级 (推荐pg_upgrade)
/usr/pgsql-18/bin/pg_upgrade \
    --old-datadir /var/lib/pgsql/17/data \
    --new-datadir /var/lib/pgsql/18/data \
    --old-bindir /usr/pgsql-17/bin \
    --new-bindir /usr/pgsql-18/bin \
    --link  -- 使用硬链接加速

# 5. 优化新配置
# 编辑 postgresql.conf,启用异步I/O
cat >> /var/lib/pgsql/18/data/postgresql.conf << EOF
io_method = 'io_uring'
effective_io_concurrency = 300
maintenance_io_concurrency = 300
EOF

# 6. 启动并验证
sudo systemctl start postgresql-18
psql -c "SELECT version();"
psql -c "SHOW io_method;"

5.2 MySQL 9.7 LTS 升级步骤

# 1. 检查兼容性
mysqlcheck -u root -p --all-databases --check-upgrade

# 2. 逻辑备份 (最安全的方式)
mysqldump -u root -p --all-databases \
    --routines --triggers --events \
    --single-transaction \
    --master-data=2 > mysql_full_backup.sql

# 3. 安装MySQL 9.7
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server

# 4. 恢复数据
mysql -u root -p < mysql_full_backup.sql

# 5. 运行升级检查
mysql_upgrade -u root -p --force

# 6. 验证版本和功能
mysql -e "SELECT VERSION();"
mysql -e "SHOW VARIABLES LIKE 'activate_mandatory_roles';"

六、性能调优要点

6.1 PostgreSQL 18 I/O调优

-- 根据存储类型调整参数
-- NVMe SSD配置
ALTER SYSTEM SET io_method = 'io_uring';
ALTER SYSTEM SET effective_io_concurrency = 400;
ALTER SYSTEM SET io_combine_limit = '512kB';

-- SATA SSD配置
ALTER SYSTEM SET io_method = 'io_uring';
ALTER SYSTEM SET effective_io_concurrency = 200;
ALTER SYSTEM SET io_combine_limit = '256kB';

-- HDD配置 (推荐worker模式)
ALTER SYSTEM SET io_method = 'worker';
ALTER SYSTEM SET effective_io_concurrency = 100;

-- 使配置生效
SELECT pg_reload_conf();

-- 监控I/O性能
SELECT * FROM pg_stat_get_backend_io(NULL);

6.2 虚拟列的最佳实践

-- ✅ 好的实践:简单的表达式
total_amount NUMERIC GENERATED ALWAYS AS (price * quantity) VIRTUAL

-- ✅ 好的实践:利用虚拟列减少JOIN
full_name TEXT GENERATED ALWAYS AS (first_name || ' ' || last_name) VIRTUAL

-- ❌ 避免:复杂计算放在虚拟列中(每次SELECT都要算)
risk_score NUMERIC GENERATED ALWAYS AS (
    (SELECT AVG(risk) FROM risk_factors WHERE customer_id = c.id)
) VIRTUAL
-- 上面的例子应该用存储列或物化视图

-- ❌ 避免:频繁用于WHERE条件的虚拟列(无法建索引)
-- 如果需要索引,改用STORED类型

七、总结与展望

2026年的数据库市场,PostgreSQL和MySQL都在自己的赛道上加速奔跑:

PostgreSQL 18 通过异步I/O、虚拟生成列、UUIDv7三大特性,巩固了其在高级数据库特性上的领先地位。异步I/O带来的3倍读性能提升,让它在大数据分析场景中的竞争力显著增强。UUIDv7的原生支持,则让分布式系统的ID生成方案更加优雅。

MySQL 9.7 LTS 作为8.0的正式继任者,承载了9.x Innovation系列的所有创新。向量检索、JavaScript存储过程、Group Replication的增强,让MySQL在保持易用性的同时,也在向更高级的场景拓展。

对于技术团队,我的建议是:

  1. 如果是新项目:优先考虑PostgreSQL 18,特别是需要JSON处理、复杂查询、或AI向量检索的场景
  2. 如果是存量MySQL系统:尽快升级到9.7 LTS,8.0的EOL是硬性deadline
  3. 如果是分布式系统:PostgreSQL 18的uuidv7是一个不可忽视的优势
  4. 如果是高并发读取:PostgreSQL 18的异步I/O值得做一次POC验证

数据库技术在2026年进入了一个新的成熟期。不是推翻重来,而是在已有基础上精雕细琢。这种务实的进化方式,对生产环境来说才是最珍贵的。


参考资料:

复制全文 生成海报 PostgreSQL MySQL 数据库 异步I/O UUIDv7

推荐文章

Go配置镜像源代理
2024-11-19 09:10:35 +0800 CST
禁止调试前端页面代码
2024-11-19 02:17:33 +0800 CST
PHP 的生成器,用过的都说好!
2024-11-18 04:43:02 +0800 CST
File 和 Blob 的区别
2024-11-18 23:11:46 +0800 CST
JavaScript设计模式:组合模式
2024-11-18 11:14:46 +0800 CST
手机导航效果
2024-11-19 07:53:16 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
Vue 3 路由守卫详解与实战
2024-11-17 04:39:17 +0800 CST
程序员茄子在线接单