本文主要记录在dm学习过程中,与mysql有差异的部分
表、索引
dm建表语法
create table student(
id int,
name vachar(16),
age int,
sex varchar(4),
cluster primary key("id")
)
create index idx_age on student("age")
除了指定主键外,不能直接在表的ddl里面建立索引
在mysql中,索引包含在表的 ddl 语句中,因此create table like语句可以复制表的结构+索引信息,但是没办法拷贝出数据;
在dm中:
仅拷贝表结构,没有拷贝主键、约束、索引:
create table student2 as select * from STUDENT where 1=0
拷贝了表结构和数据记录,但是没有拷贝主键、约束、索引
create table student3 like student
可以通过 dbms_metadata.get_ddl() 获取表ddl及索引ddl语句
表:
select dbms_metadata.get_ddl('TABLE',table_name) from dual
索引:
select dbms_metadata.get_ddl('INDEX',index_name) from dual
在同一个schema下,不能建立同名索引
在mysql数据库中,主键索引和唯一索引的区别在于主键索引是聚簇索引,唯一索引是非聚簇索引;
在dm数据库中,严格意义上没有主键索引这一分类,可以把在建表时指定主键所建立的索引等价理解成唯一索引+非空约束,且主键索引(唯一索引)和聚簇索引没有必然联系;在没有明确指定聚簇索引的时候,dm默认采用row_id建立聚簇索引,即使用主键进行查询也有可能需要回表。
在dm数据库创建聚簇索引需要注意:
- 每张表中只允许有一个聚集索引,默认为 row_id ,新建聚簇索引会自动删除原有聚簇索引,删除非 row_id 的聚簇索引会自动重建 row_id 聚簇索引(无其他聚簇索引的情况下,row_id聚簇索引无法再被删除)
- 新建、删除聚集索引时,自动重建所有索引,要避免在业务高峰期或数据量大的环境操作;
- 不支持在含有多媒体类型的表上新建聚集索引(多媒体类型包含长字符串类型、二进制等)
用户角色
创建用户前先检查密码策略
select * from v$parameter where name='PWD_POLICY'
pwd_policy取值:
0 - 无策略
1 - 禁止与用户名相同
2 - 长度不小于9
4 - 至少包含一个大写字母
8 - 至少包含一个数字
16 - 至少包含一个标点符号
组合使用将值相加即可
alter SYSTEM set 'pwd_policy'=0;
create user dmuser identified by "";
密码要用双引号括起来,单引号不行
mysql中没有角色的概念,dm 和 oracle 中的角色可以理解成权限的集合,通过授予用户角色来实现授予用户权限,可以简化对用户权限的管理。管理员只需管理角色权限,而不是逐个管理每个用户的权限,同时可以一次性将多个权限授予一个角色,然后将该角色授予用户。这样避免了对每个用户单独授予多个权限,使权限管控更灵活,也便于审计监控。
角色-用户是多对多的关系,一个角色能被多个用户拥有,同时一个用户也可以拥有多个角色。
查看现有角色
select * from dba_roles;
create role dbauser;
grant select any table ,update any table ,delete any table,insert any table to dbauser;
grant dbauser to dmuser;
查看用户系统权限
select * from dba_sys_privs where grantee='DMUSER';
查看用户表权限
select * from dba_tab_privs where grantee='DMUSER';
查看角色被授予的用户
select * from dba_role_privs where granted_role='DBAUSER'
- 系统权限转授
with admin option - 对象权限转授
with grant option
权限回收
revoke delete any table from dbauser
explain 执行计划
- NSET:用于结果集收集的操作符,一般是查询计划的顶层节点
- PRJT:关系的"投影"运算,用于选择表达式项的计算;如查询,排序,函数索引创建等。
- SLCT:关系的"选择" 运算,用于查询条件的过滤。
- AAGR:简单聚集,用于没有group by的count,sum,age,max,min等聚集函数的计算。
- FAGR:快速聚集,用于没有过滤条件时从表或 索引快速获取 MAX/MIN/COUNT值
- BLKUP:回表
- 索引
执行计划可能打印的索引共有4种类型
1.CSCN 全表扫描
2.SSCN 索引全扫描
3.SSEK 二级索引单值/范围扫描
4.CSEK 聚簇索引单值/范围扫描
CSCN 和 SSCN 都走全表扫描,区别在于SSCN 只包含索引数值且根据索引键进行排序,日常要用到的索引建议要达到 SSEK 级