zoukankan      html  css  js  c++  java
  • 数据库序列,视图,索引

    1.序列(SEQUENCE)

    对应的数据库字典:user_sequences

    创建序列语法:

    create sequence 序列名

    start with n 表示从几开始,默认值是1

    increment by n 每计数一次增加多少,默认是1

    maxvalue n 序列最高峰值n

    minvalue n 序列最低峰值n

    cache n 提供n个预分配的序列,保存在内存中

    cycle | nocycle 是否循环

    oredr | noorder 有序还是无序序列

    例如:

    --给员工创建一个序列

    create sequence tbl_emp_id start with 4;

    如何使用序列?

    nextval:取序列的下一个值(tbl_emp_id.nextval)

    currval:取序列的当的前值(tbl_emp_id.currval)

    在插入数据时使用:

    insert into tbl_emp values(tbl_emp_id.nextval,....)

    删除序列:

    drop sequence 序列名;

    2.索引(INDEX)

    对应的数据词典user_indexes

    作用是可以有效的提高数据库的查询效率(数据库性能优化)

    创建索引的两种方式:

    1.自动创建

    当表中的列添加了主键约束或者唯一性约束时,则系统会自动为此列创建唯一性的索引,索引名就是约束名

    2手动创建

    语法:

    create index 索引名 on 表名(列名...);

    索引有自己独立的储存空间和命名空间,创建索引也会相对牺牲一些数据库性能

    索引的原理:

    1.默认情况下,索引是采用BTree(二叉树)的数据结构

    2.伪劣(rowid),存放的数据行记录的正真“物理地址”。

      --根据某物理地址查询某一行记录

      //先获取记录的rowid

      select rowid from s_emp where first_name="Carmen";

      //根据行记录rowid查找相应的记录

      select* from s_emp where rowid='............'

    3.索引建立的原理:

      把创建索引的列值与rowid合成一个键值树,这个键值对就是索引,然后把它们存放到指定的数据结构中(二叉树,位图)中,并且是独立的索引空间

    4.索引查询的原理:

      当我们的查询语句中where 条件的列建立了索引,则查询分为一下2步:

      a.先查索引,在句列中的值直接找到rowid

      b.根据第一步得到的rowid直接定位到相应的行记录结束查询

    5.建立索引的策略:

      a.主键和唯一性列 合适

      b.不经常发生改变的列 合适

      c.满足以上两个条件,经常做查询的列 合适

      d.重复值太多的列 不合适

      e.null值太多的列 不合适

    6.删除索引

    drop index 索引名;

    视图(VIEW)


    对应的数据字典:user_view

    他是一个数据库对象,它的表格的一个“窗口”,用来保存查询语句的对象,视图是依附与表的,并且与表格共享储存空间。

    定义:本质就是一条合法的查询语句

    作用:

      1.配合权限,根据业务来做分级管理

      2.减少复杂性,增加数据的安全性

    创建视图的语法:

      create view 视图名 as 子句;

      with read only ;视图只读

      with check option

    例如:

    --以只读方式创建s_emp表中id,salary两列的视图

    create view view_name as select id,salary from s_emp with read only;

    注意:操作视图必须拥有一定的权限

    删除视图

    drop view 视图名;

    视图分类:

    关系视图,内嵌视图,对象视图,物化视图

    -----------------------------
    补充:查询当前用户可执行什么操作

    select * from session privs;

    --查询某个权限可执行的所有操作

    select* from DBA_SYS_PRIVS where grantee='DBA';(需要DBA)

    --查询当前用户被赋予的系统角色

    select *from SESSIONS_ROLES order by role;

    --授予权限的两种方式:

    1.grant createany view to 用户名

    2.grant connect,resource,dba to 用户名

  • 相关阅读:
    AOP Aspect 统一日志、异常处理、数据格式
    java基本成员默认值
    Jackson ObjectMapper
    logstash 安装 jdbc-output出错
    ElasticSearch定时删除数据(非时间结尾规律索引)
    docker安装部署
    K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
    JWT 验证
    JS查找数组中元素index
    oracle not in 失效
  • 原文地址:https://www.cnblogs.com/wangqun1234/p/7814578.html
Copyright © 2011-2022 走看看