千家信息网

create index和create index online的区别是什么

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,今天就跟大家聊聊有关create index和create index online的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
千家信息网最后更新 2024年11月12日create index和create index online的区别是什么

今天就跟大家聊聊有关create index和create index online的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

create index/create index online

此实例需要3个会话,会话1创建索引,会话2修改索引键字段的值,会话3查看锁的情况。

创建测试表

  1. create table t_test

  2. (

  3. col1 number,

  4. col2 number

  5. );


造测试数据(根据自己机器具体情况估计需要的数据量,使创建索引的时间大概在20-30秒

  1. insert into t_test

  2. select rownum col1, rownum col2 from dual

  3. connect by rownum<10000000;

  4. commit;


create index

会话1:

  1. SQL> set time on

  2. 10:22:01 SQL> set timing on

  3. 10:22:02 SQL>


  4. --获取 会话1 sid

  5. 10:22:04 SQL> select sid from v$mystat where rownum=1;


  6. SID

  7. ----------

  8. 144


  9. Elapsed: 00:00:00.01


会话2:

  1. SQL> set time on

  2. 10:22:06 SQL> set timing on

  3. 10:22:06 SQL>


  4. --获取 会话2 sid

  5. 10:22:06 SQL> select sid from v$mystat where rownum=1;


  6. SID

  7. ----------

  8. 147


  9. Elapsed: 00:00:00.01


会话3:

  1. SQL> set time on

  2. 10:22:11 SQL> set timing on

  3. 10:22:11 SQL>


  4. --格式化输出

  5. 10:22:13 SQL> set line 200

  6. 10:23:03 SQL> col addr for a10

  7. 10:23:03 SQL> col kaddr for a10

  8. 10:23:03 SQL> col sid for 999999

  9. 10:23:03 SQL> col type for a10

  10. 10:23:03 SQL> col id1 for 99999999999

  11. 10:23:03 SQL> col id2 for 99999999999

  12. 10:23:03 SQL> col lmod for 99

  13. 10:23:03 SQL> col request for 99

  14. 10:23:03 SQL> col ctime for 999999

  15. 10:23:03 SQL> col block for 99

  16. 10:23:03 SQL> col table_name for a30

  17. 10:23:03 SQL>


会话1:

  1. --创建索引,不使用online(因为要在 会话2、会话3 中做其它操作,所以表中数据要量要足够大)

  2. 10:25:08 SQL> create index ix_test_col1 on t_test(col1);


  3. Index created.


  4. Elapsed: 00:00:59.73


会话2:

  1. --修改指定行的索引字段,此时update语句会hang住,等待索引创建,从会话3 中的锁的情况可以看到 会话2 在等待 会话1

  2. 10:25:04 SQL> update t_test set col1=102400 where col2=102400;


  3. 1 row updated.


  4. Elapsed: 00:01:02.63


会话3:

  1. --查看此时锁的情况

  2. 10:24:29 SQL> select a.*, decode(a.type, \'TM\', b.object_name) table_name

  3. 10:24:32 2 from v$lock a, dba_objects b

  4. 10:24:32 3 where a.id1=b.object_id(+)

  5. 10:24:32 4 and a.sid in(144, 147);


  6. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  7. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  8. 315C65FC 315C6614 144 TM 18 0 3 0 1 0 OBJ$

  9. 315C66A8 315C66C0 147 TM 5180637 0 0 3 0 0 T_TEST

  10. 315C6550 315C6568 144 TM 5180637 0 4 0 3 1 T_TEST

  11. 3203444C 32034460 144 DL 5180637 0 3 0 3 0

  12. 32034394 320343A8 144 DL 5180637 0 3 0 3 0

  13. 31627F54 31627F78 144 TX 655384 57423 6 0 3 0


  14. 6 rows selected.


  15. Elapsed: 00:00:02.12

  16. 10:25:52 SQL>/


  17. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  18. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  19. 315C5A88 315C5AD0 144 TS 6 23571 6 0 18 0

  20. 315C65FC 315C6614 144 TM 18 0 3 0 35 0 OBJ$

  21. 315C66A8 315C66C0 147 TM 5180637 0 0 3 34 0 T_TEST

  22. 315C6550 315C6568 144 TM 5180637 0 4 0 37 1 T_TEST

  23. 3203444C 32034460 144 DL 5180637 0 3 0 37 0

  24. 32034394 320343A8 144 DL 5180637 0 3 0 37 0

  25. 31627F54 31627F78 144 TX 655384 57423 6 0 37 0


  26. 7 rows selected.


  27. Elapsed: 00:00:00.39

  28. 10:26:16 SQL>/


  29. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  30. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  31. 32034394 320343A8 147 CU 754675352 0 6 0 0 0


  32. Elapsed: 00:00:00.21

  33. 10:26:20 SQL>/


  34. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  35. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  36. 315C6550 315C6568 147 TM 5180637 0 3 0 4 0 T_TEST

  37. 31616060 31616084 147 TX 393221 56619 6 0 4 0


  38. Elapsed: 00:00:00.77


会话2:

  1. --回滚修改

  2. 10:26:21 SQL> rollback;


  3. Rollback complete.


  4. Elapsed: 00:00:00.01


会话3:

  1. 10:26:26 SQL> /


  2. no rows selected


  3. Elapsed: 00:00:00.03

  4. 10:26:36 SQL> /


  5. no rows selected


  6. Elapsed: 00:00:00.01


create index online

会话1:

  1. --删除索引,并加online选项重建

  2. 10:26:46 SQL> drop index ix_test_col1;


  3. Index dropped.


  4. Elapsed: 00:00:00.35

  5. 10:26:59 SQL> create index ix_test_col1 on t_test(col1) online;


  6. Index created.


  7. Elapsed: 00:02:47.07


会话2:

  1. --修改指定行的索引字段,此时update不会待索引创建,而是很快结束

  2. 10:26:50 SQL> update t_test set col1=102400 where col2=102400;


  3. 1 row updated.


  4. Elapsed: 00:00:09.21


会话3:

  1. --查看锁的情况

  2. 10:26:53 SQL> /


  3. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  4. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  5. 315C66A8 315C66C0 147 TM 5180637 0 3 0 0 0 T_TEST

  6. 315C6550 315C6568 144 TM 5180637 0 2 0 1 0 T_TEST

  7. 3203444C 32034460 144 DL 5180637 0 3 0 2 0

  8. 32034394 320343A8 144 DL 5180637 0 3 0 2 0

  9. 315C65FC 315C6614 144 TM 5180671 0 4 0 1 0 SYS_JOURNAL_5180670

  10. 31627F54 31627F78 144 TX 327692 57125 6 0 2 0


  11. 6 rows selected.


  12. Elapsed: 00:00:02.49

  13. 10:27:26 SQL>/


  14. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  15. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  16. 315C66A8 315C66C0 147 TM 5180637 0 3 0 6 0 T_TEST

  17. 315C6550 315C6568 144 TM 5180637 0 2 0 7 0 T_TEST

  18. 3203444C 32034460 144 DL 5180637 0 3 0 8 0

  19. 32034394 320343A8 144 DL 5180637 0 3 0 8 0

  20. 315C65FC 315C6614 144 TM 5180671 0 4 0 7 0 SYS_JOURNAL_5180670

  21. 31627F54 31627F78 144 TX 327692 57125 6 0 8 0

  22. 31616060 31616084 147 TX 655370 57432 6 0 6 0


  23. 7 rows selected.


  24. Elapsed: 00:00:02.16

  25. 10:27:38 SQL>/


  26. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  27. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  28. 315C5A88 315C5AD0 144 TS 6 23579 6 0 3 0

  29. 315C66A8 315C66C0 147 TM 5180637 0 3 0 19 0 T_TEST

  30. 315C6550 315C6568 144 TM 5180637 0 2 0 20 0 T_TEST

  31. 3203444C 32034460 144 DL 5180637 0 3 0 21 0

  32. 32034394 320343A8 144 DL 5180637 0 3 0 21 0

  33. 315C65FC 315C6614 144 TM 5180671 0 4 0 20 0 SYS_JOURNAL_5180670

  34. 31627F54 31627F78 144 TX 327692 57125 6 0 21 0

  35. 31616060 31616084 147 TX 655370 57432 6 0 19 0


  36. 8 rows selected.


  37. Elapsed: 00:00:00.17

  38. 10:28:29 SQL>/


  39. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  40. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  41. 315C5A88 315C5AD0 144 TS 6 23579 6 0 52 0

  42. 315C66A8 315C66C0 147 TM 5180637 0 3 0 68 1 T_TEST

  43. 315C6550 315C6568 144 TM 5180637 0 2 4 69 0 T_TEST

  44. 3203444C 32034460 144 DL 5180637 0 3 0 70 0

  45. 32034394 320343A8 144 DL 5180637 0 3 0 70 0

  46. 315C65FC 315C6614 144 TM 5180671 0 4 0 69 0 SYS_JOURNAL_5180670

  47. 31627F54 31627F78 144 TX 327692 57125 6 0 70 0

  48. 31616060 31616084 147 TX 655370 57432 6 0 68 0


  49. 8 rows selected.


  50. Elapsed: 00:00:00.14


  51. --从锁的情况中看到创建索引过程中出现了表SYS_JOURNAL_5180670,查看表的相关信息

  52. 10:28:52 SQL> col partitioned for a20

  53. 10:29:02 SQL> col temporary for a20

  54. 10:29:08 SQL> select table_name, iot_type, partitioned, temporary from user_tables where table_name=\'SYS_JOURNAL_5180670\';


  55. TABLE_NAME IOT_TYPE PARTITIONED TEMPORARY

  56. ------------------------------ ------------ -------------------- --------------------

  57. SYS_JOURNAL_5180670 IOT NO N


  58. Elapsed: 00:00:00.00

  59. 10:29:10 SQL> set line 100

  60. 10:29:15 SQL> desc SYS_JOURNAL_5180670

  61. Name Null? Type

  62. ----------------------------------------------------- -------- ------------------------------------

  63. C0 NOT NULL NUMBER

  64. OPCODE CHAR(1)

  65. PARTNO NUMBER

  66. RID NOT NULL ROWID


  67. 10:29:19 SQL> set line 200

  68. 10:29:37 SQL> select a.*, decode(a.type, \'TM\', b.object_name) table_name

  69. 10:29:48 2 from v$lock a, dba_objects b

  70. 10:29:48 3 where a.id1=b.object_id(+)

  71. 10:29:48 4 and a.sid in(144, 147);


  72. ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK TABLE_NAME

  73. ---------- ---------- ------- ---------- ------------ ------------ ---------- ------- ------- ----- ------------------------------

  74. 315C5A88 315C5AD0 144 TS 6 23579 6 0 132 0

  75. 315C66A8 315C66C0 147 TM 5180637 0 3 0 148 1 T_TEST

  76. 315C6550 315C6568 144 TM 5180637 0 2 4 149 0 T_TEST

  77. 3203444C 32034460 144 DL 5180637 0 3 0 150 0

  78. 32034394 320343A8 144 DL 5180637 0 3 0 150 0

  79. 315C65FC 315C6614 144 TM 5180671 0 4 0 149 0 SYS_JOURNAL_5180670

  80. 31627F54 31627F78 144 TX 327692 57125 6 0 150 0

  81. 31616060 31616084 147 TX 655370 57432 6 0 148 0


  82. 8 rows selected.


  83. Elapsed: 00:00:00.13


会话2:

  1. --回滚update

  2. 10:27:28 SQL> rollback;


  3. Rollback complete.


  4. Elapsed: 00:00:00.01

  5. 10:30:04 SQL>


会话3:

  1. --查看锁的情况,没有记录,索引创建已结束

  2. 10:29:52 SQL> /


  3. no rows selected


  4. Elapsed: 00:00:00.08

  5. 10:30:07 SQL> /


  6. no rows selected


  7. Elapsed: 00:00:00.01


结论:
1.create index 会阻塞其它会话修改索引字段,直到索引创建结束;
2.create index online 允许其它会话修改索引字段,但如果修改索引字段的会话没有commit或是rollbak,则索引创建会被阻塞;
3.online创建索引时会临时创建一个IOT的表,索引创建结束后删除IOT表(IOT表的使用方法暂时还不清楚)

看完上述内容,你们对create index和create index online的区别是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

索引 情况 字段 内容 数据 测试 阻塞 清楚 使用方法 信息 实例 很快 方法 时间 更多 机器 格式 知识 篇文章 结论 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 2020网络安全周培训会 IP视频监控网络技术视频教程 黑魂2禁止登录游戏服务器 海岛奇兵服务器错误55怎么恢复 软件开发公司游戏 工程建设审批管控软件开发平台 cs链接服务器遇到问题 数据库家庭住址怎么表示 山东济南联想服务器哪家好 设置一个学生课表数据库 和利时系统操作员连接不上服务器 地球科学数据库 网络安全学费一般多少钱 nas服务器连接局域网 ssl安全证书服务器 珠海市聚谦软件开发有限公司 办公楼网络安全建设 windows 无法与主dns服务器通信 长宁区网络技术开发怎么样 网络安全好用的靶场 龙之谷手游服务器有哪些 坦克世界南方服务器 宝塔可以用外部数据库吗 根服务器中国 易迅网络安全ppt 成都第三方软件开发价钱是多少 地球科学数据库 数据库技术与应用杨金民答案 长宁区网络技术开发怎么样 戴尔服务器默认管理口地址
0