在云计算与大数据并行的时代,MySQL 8.0以颠覆性的改进重塑了关系型数据库标杆。本文将从窗口函数实战、JSON路径表达式、原子DDL等10大新特性切入,结合千万级电商订单库的优化案例,为您呈现一场技术盛宴。
SELECT
product_id,
SUM(sales) OVER (PARTITION BY region ORDER BY sale_date) AS running_total
FROM sales_history;
ROWS/RANGE
框架,轻松实现累计/移动平均WITH RECURSIVE category_path (id, name, path) AS (
SELECT id, name, name
FROM categories
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, CONCAT(cp.path, ' > ', c.name)
FROM categories c
INNER JOIN category_path cp ON cp.id = c.parent_id
)
SELECT * FROM category_path;
ALTER TABLE orders
ADD COLUMN shipping_cost DECIMAL(10,2),
ALGORITHM=INPLACE, LOCK=NONE;
CREATE INDEX idx_order_date_desc ON orders(order_date DESC);
CREATE TABLE orders_clone CLONE orders;
-- 错误示范(索引失效)
SELECT * FROM orders
WHERE user_id = 123 AND order_date > '2025-01-01';
-- 正确建索引
ALTER TABLE orders ADD INDEX idx_user_date (user_id, order_date);
ALTER TABLE orders ADD INDEX idx_cover (user_id, status, amount);
-- 字符串比较导致索引失效
SELECT * FROM products WHERE id = '123';
-- 原始SQL(耗时2.3s)
SELECT o.* FROM orders o
JOIN users u ON o.user_id = u.id
WHERE u.country = 'CN';
-- 优化后(耗时0.12s)
SELECT * FROM orders o
WHERE EXISTS (
SELECT 1 FROM users u
WHERE u.id = o.user_id AND u.country = 'CN'
);
-- 传统LIMIT(越翻越慢)
SELECT * FROM logs ORDER BY id DESC LIMIT 100000,20;
-- 优化方案(延迟关联)
SELECT * FROM logs
INNER JOIN (
SELECT id FROM logs
ORDER BY id DESC LIMIT 100000,20
) AS tmp USING(id);
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM users WHERE id > 10 FOR UPDATE;
-- 此时会锁定(10, +supremum)区间
SHOW ENGINE INNODB STATUS;
# my.cnf配置片段
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=on
group_replication_local_address= "192.168.1.101:33061"
group_replication_group_seeds= "192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061"
特性 | ProxySQL | MaxScale | MySQL Router |
---|---|---|---|
查询路由规则 | ★★★★★ | ★★★★☆ | ★★★☆☆ |
连接池管理 | ★★★★☆ | ★★★★★ | ★★☆☆☆ |
故障自动转移 | ★★★★☆ | ★★★☆☆ | ★★★★★ |
学习成本 | 中 | 高 | 低 |
SHOW GLOBAL STATUS LIKE 'Questions';
long_query_time=0.5
(建议设置)Threads_connected
vs max_connections
SHOW ENGINE INNODB STATUS\G
从8.0版本开始,MySQL正在以惊人的速度进化。窗口函数、CTE、原子DDL等新特性正在重塑我们的开发模式,而MGR集群和InnoDB增强则让高可用架构变得前所未有的简单。建议开发者重点关注以下方向:
CREATE RESOURCE GROUP
实现租户级资源隔离CREATE SQL MACRO
封装复杂逻辑学习资源推荐: