这几天在做数据库的优化,有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name
on tablename (entp_id,sell_date),结果悲剧了,把所有的DML语句都阻塞了,导致系统不能正常使用,还好是晚上10点,用户不是非常多,1个小时候,索引结束,阻塞解决;
上网查了一下,如果加上 online参数后,就可以在线做索引,而不需要阻塞所有的DML语句,血的教训,拿出来与各位共勉,具体online与不加online区别如下:
1. DML操作对create index 的影响。 如果在create的时候,有其他的进程在对这个index 所对应的数据进行DML操作,create会受影响:
SQL> create table test (id number, name varchar2(20));
Table created.
--- 然后重新开一个session:
SQL> insert into test values (1,'lms');
1 row created.
<no commit>
SQL> create index t1 on test(id);
create index t1 on test(id)
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
2. 加online这个参数,这个参数加上以后,除了create过程中index 保持online状态,Oracle还会在create index之前等待所有DML操作结束,然后得到DDL锁,开始create.
SQL> create index t1 on test(id) online;
<hold before commit>
<after commit>
SQL> commit;
Commit complete.
Index altered.
---- 如果不commit,上面的操作就会一直hold。
所以以后create索引和rebuild索引的时候最好加上online。
分享到:
相关推荐
### Oracle在线建立超大表的索引 #### 需求背景 在Oracle数据库中,为含有千万级别记录的大表创建索引是一项挑战性任务,尤其是对于那些处于高并发在线生产环境中的表。本文将详细介绍如何为一个核心大表(INFO_...
CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,…) [index_type] index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {...
使用CREATE INDEX语句可以在一个已有表上创建索引,一个表可以创建多个索引。 语法格式: CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: UNIQUE:表示创建的是唯一性索引 ...
在这个例子中,我们使用了“INDEX”提示来指定使用“/BIC/AZ2001ON300~1”索引来扫描“/BIC/AZ2001ON300”表。通过使用索引,可以大幅度地提高查询效率。 在 SAP BW 中,还有其他几种方式来提高查询效率。例如,...
### 创建数据库表与索引实验知识点总结 #### 一、实验背景与目标 **实验标题:** 创建数据库表与索引实验 **实验描述:** 本次实验旨在让学生掌握如何在数据库中创建表和索引,同时理解并实践数据完整性的重要性...
创建表空间参数详解 创建表空间参数详解是 Oracle 数据库中一个非常重要的概念,了解创建表空间参数详解的知识点可以帮助数据库管理员更好地管理和维护数据库。下面我们将详细解释创建表空间参数详解的语法描述,并...
create unique index index_name on tablename(column) online nologging parallel 2 compute statistics; ``` 创建完成后,需要马上检查系统应用,如果发现有错误走到该索引的语句,并且有严重影响的,可能需要立即...
对于较早的 Oracle 版本,修改索引的主要任务是修改已存在索引的存储参数适应增长的需要或者重新建立索引。而 Oracle8I 及以后的版本,可以对无用的空间进行合并。 语法:ALTER [UNIQUE] INDEX [user.]index ...
CREATE INDEX idx_msgdate ON STAT_SUBMIT_CENTER (msgdate); ``` 如果表是分区表,还可以考虑创建全局分区索引以进一步提高性能。 #### 五、注意事项 - 在创建索引过程中,应密切关注系统资源使用情况,特别是...
当我们在数据库中执行查询时,如果没有索引,数据库系统需要遍历整个表来找到匹配的行,这在大数据量的情况下可能会非常耗时。而有了索引,数据库可以快速定位到所需的数据,大大提高了查询速度。 2. **创建索引**...
3. `REBUILD ONLINE`会创建临时日志表记录索引变更,完成后再删除旧索引。 五、重建分区表上的分区索引 使用`ALTER INDEX indexname REBUILD PARTITION partitionname TABLESPACE tablespacename`或`ALTER INDEX ...
MYSQL 索引注意事项及其优化 索引是 MySQL 中的一种数据结构,可以提高查询效率。但是,索引也需要合理地使用和优化,否则可能会降低查询效率。下面是 MySQL 索引的分类和优化注意事项。 索引分类 MySQL 中的索引...
- `ONLINE`:表示表空间在线且可被使用,默认状态。 - `OFFLINE`:表示表空间离线,不可被使用。 - **PERMANENT | TEMPORARY**:定义表空间的类型。 - `PERMANENT`:永久表空间,存储持久性数据。 - `TEMPORARY`...
unity在线地图Online Maps 2.5.16 需Unity 4.6.0或以上版本 Requires Unity 4.6.0 or higher. Features: ? Supports Unity v4.6+, Unity v5+; ? Standalone, Android, iOS, Windows Store, WebGL, Webplayer;...
CREATE INDEX index_name ON table_name (index_columns) ON [partition_schema] (partition_column); ``` **3. 注意事项** - 分区列不能是`text`、`ntext`、`image`、`xml`、`timestamp`、`varchar(max)`、`...
CREATE NONCLUSTERED INDEX IX_Orders_CustomerID ON Orders(CustomerID); ``` 创建一个名为`PK_Employees_EmployeeID`的聚簇索引作为主键: ```sql ALTER TABLE Employees ADD CONSTRAINT PK_Employees_...
* 创建索引:`CREATE INDEX indexName ON mytable(username(length))` * 修改表结构:`ALTER mytable ADD INDEX [indexName] ON (username(length))` * 创建表时直接指定:`CREATE TABLE mytable(ID INT NOT NULL, ...
需要注意的是,Oracle 不会自动维护全局分区索引,当我们在对表的分区做修改之后(如对分区作 move,truncate,drop),如果对分区进行维护操作时不加上 update global indexes,通常会导致全局索引的INVALDED,必须在...
MySQL数据库索引建立详解 MySQL数据库索引是关系数据库管理系统中的一种机制,旨在提高查询效率和性能。索引是数据库中的一种数据结构,它可以帮助数据库快速定位和检索数据。正确地建立索引可以大大提高数据库的...