Online create index (Oracle,PG,SQLserver)

发布时间 2023-10-11 22:14:30作者: DBAGPT

背景

无论哪种数据库,用常规的(rebuild or create)重建或者创建索引时,都会阻塞其他DML操作,并且创建过程中只需要扫描表一次。

Oracle

Oracle在10g时已经实现 可以在线(online)创建索引,但是此时的技术并不成熟,直到11g开始,online相当成熟,不会因此导致DML等待,并且11g开始,(rebuild or create)重建或者创建索引变得更加强大,可以加并行参数。
使用方法::
create index xxxx online;
alter index xxxx rebuild online;

PG

PG通过使用关键字concurrently来实现在线创建索引,
使用方法:
create index concurrently xxxx;
reindex index concurrently xxxx;

SQLserver

SQLserver 在线创建索引只有企业版才有,SQLserver2008以后,所有版本都支持。
使用方法:
ALTER INDEX [IX_Test] ON [dbo].[Test] REBUILD WITH (ONLINE = ON);
ALTER INDEX ALL ON [dbo].[Test] REBUILD WITH (ONLINE = ON);

特别注意

以上无论哪种情况,online||concurrently || ONLINE = ON 创建索引时都尽量避开业务高峰期特别是有大批量事务,
同时用这种操作创建索引时会导致产生会比不加在线关键字更需要额外的资源,包括CPU以及IO、内存以及更多的online 日志的产生。