zoukankan      html  css  js  c++  java
  • 序列-索引-视图

    1.Sequence序列:

        生成想要的主键列 (在Oracle中没有主键自增的概念,一般使用序列来完成功能。)
    创建序列:
        一般不需要设置sequence的属性,使用默认方式就可以了
        create sequence 序列名;
        如果需要设置属性,那么就加上下面的语句.
        [INCREMENT BY n]  每次拿出值加多少
        [START WITH n]    初始值从几开始
        [{MAXVALUE n | NOMAXVALUE}]  最大值
        [{MINVALUE n | NOMINVALUE}]  最小值
        [{CYCLE | NOCYCLE}]  到了最大值后是否循环(如果循环会从1开始)
        [{CACHE n | NOCACHE}] 每次在缓存里面放多少个值.
        例如:创建序列并设置属性
          create sequence seq_test 
          increment by 2
          start with 45
          maxvalue 60
          cycle
          nocache;
        drop sequence seq_test;
    删除序列:
        drop sequence 序列名;
    获取序列的下个值
        select 序列名.nextval from dual;
    获取序列的当前值(一开始不能用,要先用nextval)
        select 序列名.currval from dual;
    实例:
       create table t_user(
            id number,
            name varchar2(50) constraint user_name_nn not null,
            email varchar2(50),
            gender char(1),
            age number,
            birthday date,
            constraint user_id_pk primary key(id),
            constraint user_email_un unique(email),
            constraint user_gender_ck check(gender in('f','m'))
        );
        create sequence t_user_seq;
        insert into t_user(id,name,salary) values(t_user_seq.nextval,'tom',600);

    2.index索引:

        索引的概念:
            1. 类似书的目录结构
            2. Oracle 的"索引"是一种对象,是与表关联的可选对象,能提高SQL查询语句的速度
            3. 索引直接指向包含所查询值的行的位置,减少磁盘I/O
            4. 索引和表是相互独立的物理结构
            5. Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引
        索引的原理:
            例如:一个表中有name字段,假设要查找name='tom'的这条数据若没有索引,查找这个记录时,需要搜索表中所有的记录,因为不能保证只有一个tom,那么就必须将表中数据全部搜索一遍。
            若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值在什么位置按照一定的规则进行排列,然后构建索引条目,存储到索引段中,查询name为tom时,可以直接查找该数据所在的对应地方。
            创建了索引并不一定就会使用,因为oracle在自动统计表的信息后,会决定是否使用索引,表中数据很少时,使用全表扫描速度已经很快了,那么就没有必要使用索引了。
        

     索引的创建:
            1.自动创建
                当在表中指定了primary Key或者unique约束时会自动创建唯一值索引。
            2.用户创建。
            用户可以创建非唯一值索引以提高在访问数据时的效率。
            语法:
                create index 索引名
                on 表名(列名);
            例如:
                 create index emp_index
                 on s_emp(last_name);
            
     删除索引:
                drop index 索引名;
            例如:
                drop index emp_index;
            创建成功后可以通过如下语句查看:
                select index_name from user_indexes;

        给某列创建索引的原则:
            1.列经常作为where子句的限定条件或者作为连接条件
            2.列包含的数据量很大,并且很多非空的值。
            3.两个或者更多列频繁的组合在一起作为where的限定条件或者连接条件
            4.列总是作为搜索条件
            5.索引查出的数据量占2%~4%
            6.索引不是越多越好,不是索引越多越能加速查找。
            7.要索引的表不经常进行修改操作
        注意:
            1.在表中的某一个合适的列加入上了索引,那么也只有在数据量很大的时候,才能有所体现出这个查询的效率.
            2.索引一旦建立成功,那么之后这个索引就由系统来管理,我们自己是控制不了的.

        索引的种类:
            Single column 单列索引
            Concatenated  多列索引
            Unique        唯一索引
            NonUnique     非唯一索引
        
        索引结构分为:
            B-tree(默认是这种结构)
                适合大量的增、删、改;
                不能用包含OR操作符的查询;
                适合高基数的列(唯一值多)
                典型的树状结构;
                默认创建的索引就是这种结构。
                create index emp_index on s_emp(last_name);
                drop index emp_index;

            位图
                做UPDATE代价非常高(oracle要根据表的每次修改来更新索引)
                非常适合OR操作符的查询;
                数据基数比较少的时候较适合建位图索引。
                create bitmap index bitmap_index on s_emp(last_name);
                drop index bitmap_index;
                注意:查询是否具备了bitmap索引的功能
                select * from v$option Where PARAMETER='Bit-mapped indexes'
                如果value值为false表示,Oracle该版本不具有bitmap索引功能或未装

            反序
                反向索引是B-tree索引的一个分支,主要是在创建索引时,针对索引列的索引键值进行字节反转。
                例如,键值1001、1002、1003,反转后1001、2001、3001,进而将值分散到不用的节点中。
                create index emp_index_reverse on s_emp(last_name) reverse;
                drop index emp_index_reverse;

            函数索引
                经常对某个字段做查询的时候,并且是带函数操作的,那么此时函数索引就可以发挥作用,提高检索速度。
                create index func_index  on s_emp(upper(last_name));
                drop index func_index;
     
    2.view视图:
        视图的概念:提取一张或多张表的数据,生成一个映射,操作视图可以达到操作原表的效果,方便数据的操作
     
        作用
            1.隐藏表中的重要数据
            2.代替一些比较长的SQL语句
     
     分类:简单视图和复杂视图
     
     区别:通过简单视图可以修改原表的数据

    1.简单视图:视图代表的SQL语句中没有组函数,只有一张表数据
     
    创建      
        create or replace view 视图名字
        as
        sql语句
    删除      
      drop view 视图名字
    实例
    create or replace view v_test
    as 
    select *
    from t_user
    where id>10;
    
    select * from v_test;
    
    create or replace view v_test
    as 
    select *
    from t_user
    where id>10
    with read only;//只读视图
    
    create or replace view v_test
    as 
    select *
    from t_user
    where id>10
    with check option;//通过视图进行的操作,必须在视图的可见范围内,
    //即视图中有的数据可以修改,但是视图中没有,原表中有的数据不可以修改 
     
    2.复杂视图:视图代表的SQL语句中有组函数,有多张表数据
    复杂视图
        create or replace v_test
        as
        select avg(salary) from
        t_user;
    注意:简单视图中对原表数据修改,视图中的数据随即变化
  • 相关阅读:
    SpringMVC拦截器
    SpringMVC异常
    SpringMVC文件上传
    SpringMVC返回值类型
    JVM字节码
    使用Apache JMeter进行测试
    Tomcat优化
    垃圾收集器
    GC常见算法
    VisualVM远程连接Tomcat
  • 原文地址:https://www.cnblogs.com/Magic-Li/p/12774920.html
Copyright © 2011-2022 走看看