首页/数据/数据库速查/查询改写常用套路
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

查询改写常用套路

把 OR 改 UNION、把子查询改 JOIN、把 COUNT 估算化、把深分页改游标;改写前先 EXPLAIN 对照,避免凭感觉重写。

数据库速查数据更新于 2026-10-12
用途等价改写提效
常见OR→UNION / IN 大列表→临时表 JOIN / 深分页→游标
原则改写前后都 EXPLAIN

OR 改写示例

OR 改写示例
-- 原句可能全表扫
SELECT * FROM orders WHERE user_id = 42 OR sku = 'SKU-1';
-- 改写为两次索引访问合并
SELECT * FROM orders WHERE user_id = 42
UNION
SELECT * FROM orders WHERE sku = 'SKU-1';

大表计数估算

大表计数估算
-- 精确计数很贵时先用近似
SELECT table_rows FROM information_schema.tables
WHERE table_schema='appdb' AND table_name='orders';
改写后结果集必须完全一致(含 NULL/去重/顺序语义),否则性能优化换来数据错误。

易错点

  • UNION 会去重而 OR 不会,改写时注意用 UNION ALL 还是 UNION
  • 近似计数用于监控与展示可以,用于对账与决策不行

数据来源与参考

  • MySQL 8.0 Reference Manual: Optimizing SELECT Statements

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌