首页/数据/SQL 速查/在线创建索引:INPLACE 与 CONCURRENTLY
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

在线创建索引:INPLACE 与 CONCURRENTLY

生产环境加索引要控制阻塞:MySQL 8.0 用 ALGORITHM/LOCK 子句约束在线 DDL;PostgreSQL 用 CREATE INDEX CONCURRENTLY。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
ALTER TABLE orders
  ADD INDEX idx_status (status), ALGORITHM=INPLACE, LOCK=NONE;
-- 若存储引擎或操作不支持会直接报错,而不是退化成锁表执行

PostgreSQL

PostgreSQL
CREATE INDEX CONCURRENTLY idx_orders_status ON orders (status);
-- 不能在事务块中执行;失败会留下 INVALID 索引,需删除重试
DROP INDEX CONCURRENTLY idx_orders_status;
MySQL显式声明 ALGORITHM 与 LOCK 让阻塞级别可控;执行期间关注磁盘与复制延迟
PostgreSQLCONCURRENTLY 降低锁级别但耗时更长,需要额外扫描与等待
执行窗口无论哪种方式都应避开高峰并观察负载

易错点

  • 在业务高峰直接加索引:即使在线 DDL 也有资源开销与复制延迟风险
  • PG 的 CONCURRENTLY 放进事务:直接报错终止;失败留下的 INVALID 索引要先清理再重试

数据来源与参考

  • MySQL 8.0 Reference Manual · Online DDL Operations
  • PostgreSQL Documentation · Building Indexes Concurrently
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌