安装数据库

基本信息

版本:OracleXE184_Win64
系统管理员:system/123456

SQL Plus命令

创建表空间、用户

Oracle 12c 创建用户

Oracle12c 中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为 ContainerDatabase,中文翻译为数据库容器,PDB全称为PluggableDatabase,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对 多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。

  1. create temporary tablespace my_temp
  2. tempfile 'D:\database\oracle space\pdmis_temp.dbf'
  3. size 50m
  4. autoextend on
  5. next 50m maxsize 20480m
  6. extent management local;
  7. create tablespace my
  8. datafile 'D:\database\oracle space\my.dbf'
  9. size 200m
  10. autoextend on
  11. next 100m maxsize unlimited;
  12. create user C##my identified by my;
  13. create role c##myroles container = all;
  14. grant dba to c##myroles container = all;
  15. grant c##myroles to c##my container = all;
  16. -- 查询表空间
  17. select * from dba_tablespaces;
  18. -- 查询当前数据库是CDByes: CDB, no PDB
  19. select CDB from v$database;
  20. -- 修改成PDB
  21. alter session set container = pdb1;
  22. -- 修改成CDB
  23. alter session set container = cdb$root;
  24. -- 删除表空间
  25. DROP TABLESPACE my INCLUDING CONTENTS AND DATAFILES;

创建表

  1. create table basic_student_info(
  2. student_no varchar2(32),
  3. student_name varchar2(64),
  4. class_no varchar2(32),
  5. major_no varchar2(32),
  6. major_name varchar(32),
  7. brithday varchar(32),
  8. create_at varchar2(32) default TO_CHAR(SYSDATE,'YY/MM/DD HH24:MI:SS'),
  9. primary key(student_no)
  10. );
  11. create index stu_class_major on basic_student_info(class_no, major_no);
  12. declare
  13. c number(8) := 100000;
  14. i number(8) := 1;
  15. BEGIN
  16. <<insert_loop>>
  17. loop
  18. insert into basic_student_info(student_no, student_name, class_no, major_no, major_name, brithday)
  19. values(to_char(i), 'test', to_char(mod(i, 100)), to_char(mod(i,10)), concat('major', mod(i, 10)), '2020-10-01');
  20. i := i+1;
  21. exit insert_loop when i > c;
  22. end loop;
  23. dbms_output.put_line('insert_loop end!');
  24. END;
  25. -- ORA-01950: 对表空间 'USERS' 无权限, 使用system账户登录授权
  26. alter user C##my quota unlimited on users;

优化

联合索引

  1. -- range scan
  2. explain plan for
  3. select * from basic_student_info where class_no = '1';
  4. -- skip scan
  5. -- 在前导列唯一值较少的情况下,才会用到index skip can
  6. -- skip scan没有直接索引查询快,但可以这样说,相比于整个表扫描(table scan),索引跳跃式扫描的速度要快得多
  7. explain plan for
  8. select * from basic_student_info where major_no = '1';
  9. -- range scan
  10. explain plan for
  11. select * from basic_student_info where class_no = '1' and major_no = '1';
  12. -- range scan
  13. -- diffrent from MySQL
  14. explain plan for
  15. select * from basic_student_info where major_no = '1' and class_no = '1';