zoukankan      html  css  js  c++  java
  • ORACLE数据库知识点整理

    一.数据库语言分类

    1. 数据库定义语言(DDL) 包括CREATE(创建)命令、ALTER(修改)命令、TRUNCATE(清空)命令、DROP(删除)命令等。

    2. 数据库操纵语言(DML) 包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)SELECT(查询)命令等。(不会自动提交事务)

    3. 数据库查询语言(DQL) 包括基本查询语句、Order By子句、Group By子句等。

    4. 事务库控制语言(TCL) 包括COMMIT(提交)命令、ROLLBACK(回滚)命令。

    5. 数据库控制语言(DCL) GRANT(授权)命令、REVOKE(撤销)命令。

    注意:DDL语句会自动提交事务!所以DML语句在事务提交之前可以回滚,DDL语句执行后不能回滚事务。

    二.Oracle字段数据类型

        VARCHAR2(length) 字符串长度可变,length 表示字符长度,字符串长度最大不能超过4000,不填默认为1

        CHAR(length) 字符串长度不可变,长度为length,字符串最大长度不能超过2000,不填默认为1

        NUMBER(a,b) 存储数字类型,可以是整数,也可以是浮点型,a代表数值的最大位数:包含小数位和小数点,b代表小数的位数。

        a的取值范围是[1-38],b的取值范围是[-84-127]

         DATA 时间类型:存储的是日期和时间,包括年、月、日、时、分、秒。

         TIMESTAMP 时间类型:存储的不仅是日期和时间,还包含了时区

         CLOB 大字段类型:存储的是大的文本,比如:非结构化的txt文本,字段大于4000长度的字符串。

         BLOB 二进制类型:存储的是二进制对象,比如图片、视频、声音等转换过来的二进制对象

     

          在 MySQL 中,数据类型大致分为四大类:

          整型 INTEGER、int、bigint

          浮点型 FLOAT、DOUBLE 、 decimal

          日期/时间 DATETIME、DATE、TIMESTAMP(包含时区)、TIME YEAR

          字符串(字符) char、varchar、text

    三.Oracle建表(create table)

    语法结构 CREATE TABLE 表名(

    列名 数据类型 ,

    列名 数据类型

    )

    四.表的约束

    按照约束用途分类:

    1.PRIMARY KEY:主键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(列名1[,列名2...])

    2.FOREIGN KEY:外键约束 ALTER TABLE 主表名 ADD CONSTRAINT 约束名 FOREIGN KEY(列名1[,列名2...])

    REFERENCES 从表名(列名1[,列名2...])

    3.CHECK:检查约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(条件)

    4.UNIQUE:唯一约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)

    5.NOT NULL:非空约束 ALTER TABLE 表名 MODIFY 列名 NOT NULL

    删除约束 ALTER TABLE 表名 DROP CONSTRAINT 约束名

    五.临时表

    创建ORACLE临时表,可以有两种类型的临时表:

    会话级临时表 :表中数据只跟当前会话(session)有关系,当会话退出,临时表中数据就会全部被清空,

    会话不退出,临时表中数据就会存在

    创建方法 CREATE GLOBAL TEMPORARY TABLE TABLE_NAME

    (COL1 TYPE1,COL2 TYPE2...) ON COMMIT PRESERVE ROWS;

    事务级临时表:临时表数据与事务有关,当进行事务提交或者事务回滚的时候,临时表的数据将自行被截断

    退出SESSION的时候,事务级的临时表也会被自动截断

    创建方法:CREATE GLOBAL TEMPORARY TABLE TABLE_NAME

    (COL1 TYPE1,COL2 TYPE2...) ON COMMIT DELETE ROWS;

    六.SELECT(查询)

    查询语法格式及执行顺序

    SELECT --从数据库表中检索数据行和列 5

    FROM --数据来自哪些表 1

    WHERE -- 哪些条件 2

    GROUP BY -- 按条件分组 3

    HAVING -- 分组后按条件过滤 4

    ORDER BY -- 按条件排序(ASC(升序)DESC(降序) ) 6

    七.INSERT INTO(新增)

    语法结构:INSERT INTO 表名(列名1,列名2……) VALUES (值1,值2……)

    INSERT INTO 表名1(列名1,列名2……) 查询结果集

    八.DELETE(删除) TRUNCATE(DDL命令)

    语法结构: DELETE FROM 表名 WHERE 条件 如果没有条件,则删除整张表数据,否则删除满足条件的数据

    TRUNCATE TABLE 表名 删除整张表数据,保留数据结构

    TRUNCATE 与DELETE 区别: (1).TRUNCATE是DDL命令,删除的数据不能恢复;DELETE命令是DML命令,删除的数据可以通过日志文件恢复。

    (2).如果表中数据记录很多,使用TRUNCATE比DELETE效率更高

    九.UPDATE(更新)

    语法结构:UPDATE 表名 SET 列名1=值,列名2=值…… WHERE 条件 需注意WHERE 条件没加的话则是全表更新

    十.算数运算符

    Oracle中的算术运算符,只有+、-、*、/四个,其中除号(/)的结果是浮点数。求余运算只能借助函数:MOD(x,y):返回x除以y的余数。

    十一.关系运算和逻辑运算

    = 、<>或者!= 、< 、<= 、> 、>= 三个逻辑运算符优先级:NOT>AND>OR

    十二.字符串连接操作符

    在Oracle中,字符串的连接用双竖线(||)表示。 SELECT 'A'||'B' FROM DUAL

    Oracle还支持使用CONCAT()函数进行字符串拼接 SELECT CONCAT('A','B') FROM DUAL

    Oracle中字符串可以用单引号,存在特殊字符的时候,必须用双引号。

    其它sql中使用+来连接

    十三.其它操作符

    DISTINCT操作 去重

    NULL的特性

    1、空值跟任何值进行算术运算,得到的结果都为空值

    2、空值跟任何值进行关系运算,得到的结果都为不成立

    3、空值不参与任何聚合运算

    4、排序的时候,空值永远是最大的

    IN 在Where子句中可以使用IN操作符来查询其列值在指定的列表中的行。

    BETWEEN…AND… 在WHERE子句中,可以使用BETWEEN操作符来查询列值包含在指定区间内的行。

    LIKE 字符匹配操作可以使用通配符“%”和“_” %:表示零个或者多个任意字符 _:代表一个任意字符

    十四.集合运算

    集合运算就是将两个或者多个结果集组合成为一个结果集

     INTERSECT(交集),返回两个查询共有的记录。

     UNION ALL(并集),返回各个查询的所有记录,包括重复记录。

    UNION(并集),返回各个查询的所有记录,不包括重复记录。

    十五.连接查询

    内连接(inner join) inner可省略 取两表的相同部分的数据

    外连接(outer join):outer可省略

    左外关联(left outer join) 取左边表的数据及两表相同部分数据的数据

    右外关联(right outer join) 取右边表的数据及两表相同部分数据的数据

    全外关联(full outer join)取两张表所有的数据

    需注意:在oracle中关联条件字段加了(+)的为从表,不加(+)的为主表

    WHERE和ON的区别:不管是WHERE 还是ON,Oracle都会把能过滤的条件先过滤掉,再关联。但两者区别在于,

    如果是内关联,两种结果相同,如果是外关联,结果会不同,ON会保留主表的所有信息,而WHERE可能会过滤掉部分主表信息。

    十六.伪列

    ROWID:表示表中该行在数据文件中的物理地址,ROWID可以唯一的标识表中的一行

    ROWNUM:表示查询结果集的该行在表中的行号

    ROWID是数据插入时生成的,ROWNUM是查询数据时生成

    十七.单行函数

    对每一个函数应用在表的记录中时,只能输入一行中的列值作为输入参数(或常数),并且返回一个结果。

    a.字符串函数:对字符串进行操作,例如:TO_CHAR()、SUBSTR()、DECODE()等等。

    ASCII(X) 求字符X的ASCII码 CHR(X) 求ASCII码对应的字符 LENGTH(X) 求字符串X的长度

    CONCATA(X,Y) 返回连接两个字符串X和Y的结果(select CONCAT('ORACLE','数据库') from DUAL;<ORACLE数据库>)

    INSTR(X,Y[,START]) 查找字符串X中字符串Y的位置,可以指定从Start位置开始搜索,不填默认从头开始

    LOWER(X) 将字符串X中的大写字母转换成小写 UPPER(X) 将字符串X中字符串的小写字母转换成大写

    INITCAP(X) 把字符串X中所有单词首字母转换为大写,其余小写 LTRIM(X[,Y]) 去掉字符串X左边的Y字符串,Y不填时,默认的是字符串X左边去空格

    RTRIM(X[,Y]) 去掉字符串X右边的Y字符串,Y不填时,默认的是字符串X右边去空格

    TRIM(X[,Y]) 去掉字符串X两边的Y字符串,Y不填时,默认的是字符串X左右去空格

    REPLACE(X,old,new) 查找字符串X中old字符,并利用new字符替换

    SUBSTR(X,start[,length]) 截取字符串X,从start位置(其中start是从1开始)开始截取长度为length的字符串,length不填默认为截取到字符串X末尾

    RPAD(X,length[,Y]) 对字符串X进行右补字符Y使字符串长度达到length长度

    LPAD(X,length[,Y]) 对字符串X进行左补字符Y使字符串长度达到length长度

    REGEXP_REPLACE() 共有六个参数 第一个是输入的字符串 第二个是正则表达式 第三个是替换的字符 第四个是标识从第几个字符开始正则表达式匹配。(默认为1)第五个是标识第几个匹配组。(默认为全部都替换掉)

    第六个是是取值范围:i:大小写不敏感;c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;

    SELECT regexp_replace('www3222wq', '[^0-9]+') FROM dual; 结果:3222

    SELECT regexp_replace('ww61w3222wq', '[^0-9]+','m',1,2) FROM dual 结果: wm61w3222wq

    REGEXP_LIKE() 与LIKE的功能相似 查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录 select * from fzq where regexp_like(value,'1[0-9]{4}60');

    REGEXP_INSTR() 与INSTR的功能相似 SELECT REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA','[^ ]+', 1, 6) "REGEXP_INSTR" FROM DUAL;

    REGEXP_SUBSTR () 与SUBSTR的功能相似 select REGEXP_SUBSTR('111,aaaa,222','[^,]+',1,2) from dual

    字符簇:[[:alpha:]] 任何字母。

    [[:digit:]] 任何数字。

    [[:alnum:]] 任何字母和数字。

    [[:space:]] 任何白字符。

    [[:upper:]] 任何大写字母。

    [[:lower:]] 任何小写字母。

    [[:punct:]] 任何标点符号。

    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

    各种操作符的运算优先级

    转义符

    (), (?:), (?=), [] 圆括号和方括号

    *, +, ?, {n}, {n,}, {n,m} 限定符

    ^, $, anymetacharacter 位置和顺序

    b.数值函数:对数值进行计算或操作,返回一个数字。例如:ABS()、MOD()、ROUND()等等。

    ABS(X) 求数值X的绝对值 CEIL(X) 求大于或等于数值X的最小值 FLOOR(X) 求小于或等于数值X的最大值

    round(x[,y]) 求数值x在y位进行四舍五入。y不填时,默认为y=0; 当y>0时,是四舍五入到小数点右边y位。当y<0时,是四舍五入到小数点左边|y|位。

    trunc(x[,y]) 求数值x在y位进行直接截取y不填时,默认为y=0;当y>0时,是截取到小数点右边y位。当y<0时,是截取到小数点左边|y|位。

    sqrt(x) 求x的平方根 power(x,y) 求x的y次幂 mod(x,y) 求x除以y的余数 log(x,y) 求x为底y的对数

    ACOS(X) 求数值X的反余弦 COS(X) 求数值X的余弦

    c.转换函数:将一种数据类型转换成另外一种类型:例如:TO_CHAR()、TO_NUMBER()、TO_DATE()等等。

    d.日期函数:对时间和日期进行操作的函数。例如:TRUNC()、SYSDATE()、ADD_MONTHS()等等。

    SYSDATE函数:该函数没有参数,可以得到系统的当前时间。

    SYSTIMESTAMP函数:该函数没有参数,可以得到系统的当前时间,该时间包含时区信息,精确到微秒。 select systimestamp from dual;

    ADD_MONTHS(r,n)函数:该函数返回在指定日期r上加上一个月份数n后的日期 r:指定的日期。n:要增加的月份数,如果N为负数,则表示减去的月份数。

    LAST_DAY(r)函数:返回指定r日期的当前月份的最后一天日期。select last_day(sysdate) from dual;

    NEXT_DAY(r,c)函数:返回指定R日期的后一周的与r日期字符(c:表示星期几)对应的日期。

    select next_day(to_date('2021-06-12','yyyy-mm-dd'),'星期六') from dual;

    EXTRACT(time)函数:返回指定time时间当中的年、月、日、分等日期部分。

    MONTHS_BETWEEN(r1,r2)函数:该函数返回r1日期和r2日期直接的月份。当r1>r2时,返回的是正数,假如r1和r2是不同月的同一天,

    则返回的是整数,否则返回的小数。当r1<r2时,返回的是负数

    ROUND(r[,f])函数:将日期r按f的格式进行四舍五入。如果f不填,则四舍五入到最近的一天

    TRUNC(r[,f])函数:将日期r按f的格式进行截取。如果f不填,则截取到当前的日期。

    十八.聚合函数

    a.AVG([distinct ] expr) 用于求平均值,distinct是可选参数,表示是否去掉重复行

    b.count(*|[distinct]expr) 用于统计行数或者条数,distinct是可选参数,使用distinct时函数必须指定列名或者表达式。否则全选就要用*号

    c.MAX([distinct] expr) 用于返回指定列或列组成的表达式expr中的最大值

    d.MIN([distinct] expr) 用于返回指定列或列组成的表达式expr中的最小值

    e.SUM([distinct] expr) 用于对指定列或列组成的表达式expr进行求和

    十九.其它常用函数

    a.NVL(列,默认值) 列为空返回默认值

    b.NVL2(列,返回值1,返回值2)列不为空返回值1,为空返回值2

    c.DECODE(列|值,判断值1,返回值1,判断值2,返回值2,...,默认值)多值判断,如果列值与判断值相同,则显示对应返回值输出,如果没有满足条件,则显示默认值

    d.CASE WHEN 条件1 THEN 返回值1 [WHEN 条件2 THEN 返回值2 ...] ELSE 默认值 END 用于实现多条件判断,如果都不满足条件,则返回默认值

    e.EXISTS(查询结果集):查询结果集有记录则成立,否则不成立

    f.NOT EXISTS(查询结果集):与EXISTS相反

    二十.分析函数

    a.1.MAX(),MIN(),SUM(),AVG(),COUNT() --加了ORDER BY 是累计求值

    b.RANK()当碰到相同数据时,此时相同数据的排名都一样,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名

    c.ROW_NUMBER()返回唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增;

    d.DENSE_RANK() 当碰到相同数据时当碰到相同数据时,此时相同数据的排名都是一样

    e.LAG(参数1,参数2,参数3)取参数1上第几位数(参数2) 第二个参数是偏移的offset,第三个参数是超出记录窗口时的默认值。

    f.LEAD(参数1,参数2,参数3)取参数1下第几位数(参数2) 第二个参数是偏移的offset,第三个参数是超出记录窗口时的默认值。

    行转列实现方法

    1.分析函数 LAG 和 LEAD

    2.条件判断 CASE DECODE

    3.集合运算 UNION(并集)

    4.联合查询

    5.PIVOT函数 UNPIVOT函数

    PIVOT(聚合函数 FOR 列名 IN(类型))

    SELECT * FROM TABLE_NAME PIVOT(MAX(COLUMN_NAME) --行转列后的列的值VALUE,聚合函数是必须要有的

    FOR COLUMN_NAME IN(VALUE_1,VALUE_2,VALUE_3) --需要行转列的列及其对应列的属性1/2/3

    )

    UNPIVOT(FOR 列名 IN(类型))

    SELECT * FROM TABLE_NAME PIVOT( --行转列后的列的值VALUE,

    FOR COLUMN_NAME IN(VALUE_1,VALUE_2,VALUE_3) --需要行转列的列及其对应列的属性1/2/3

    二十一.同义词(Synonym)

    是数据库对象的一个别名,Oracle可以为表、视图、序列、过程、函数、程序包等指定一个别名

    同义词有两种类型:

     私有同义词:拥有CREATE SYNONYM权限的用户(包括非管理员用户)即可创建私有同义词,创建的私有同义词只能由当前用户使用。

     公有同义词:系统管理员可以创建公有同义词,公有同义词可以被所有用户访问。

    语法结构:CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]synonym_name

    FOR [schema.]object_name

    ①CREATE [OR REPLACE:]表示在创建同义词时,如果该同义词已经存在,那么就用新创建的同义词代替旧同义词。

    ②PULBIC:创建公有同义词时使用的关键字,一般情况下不需要创建公有同义词。

    ③Oracle中一个用户可以创建表、视图等多种数据库对象,一个用户和该用户下的所有数据库对象的集合称为Schema(中文称为模式或者方案),

    用户名就是Schema名。一个数据库对象的全称是:用户名.对象名,即schema.object_name。

    二十二.序列

    用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成

    语法结构

    CREATE SEQUENCE sequence_name

    [START WITH num]

    [INCREMENT BY increment]

    [MAXVALUE num|NOMAXVALUE]

    [MINVALUE num|NOMINVALUE]

    [CYCLE|NOCYCLE]

    [CACHE num|NOCACHE]

    ①START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。

    ②INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。

    ③MAXVALUE:指最大值。

    ④NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。

    ⑤MINVALUE:指最小值。

    ⑥NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。

    ⑦CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。

    ⑧NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。

    ⑨CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,

    可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。

    ⑩NOCACHE:不预先在内存中生成序列号。

    二十三.视图

    视图是一张表或多张表上的预定义查询,这些表作为基表

    优点: a.可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表,具有安全性。

    b.可以将复杂的查询保存为视图,屏蔽复杂性。

    c.简化用户权限的管理,可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义

    语法结构:CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name

    AS

    SELECT查询

    [WITH READ ONLY CONSTRAINT]

    a.OR REPLACE:如果视图已经存在,则替换旧视图。

    b.FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

    c.NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。

    d.WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

    二十四.物化视图(MATERIALIZED VIEW )

    也称实体化视图,快照 (8i 以前的说法) ,它是含有数据的,占用存储空间。

    a.物化视图分类

    ON DEMAND:该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;

    CREATE MATERIALIZED VIEW MV_NAME REFRESH FORCE ON DEMAND START WITH SYSDATE

    NEXT SYSDATE+1

    ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致;

    REATE MATERIALIZED VIEW MV_NAME REFRESH FORCE ON COMMIT AS SELECT * FROM TABLE_NAME

    默认情况创建物化视图不指定类型,则是按需刷新(on demand)

    b.物化视图的特点:

    (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;

    (2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;

    (3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;

    c.物化视图刷新的方法

    (1)、FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改

    (2)、COMPLETE刷新对整个物化视图进行完全的刷新

    (3)、FORCE 如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式

    (4)、NEVER指物化视图不进行任何刷新

    d.物化视图具有表一样的特征,所以可以像对表一样,我们可以为它创建索引,创建方法和对表一样

    e.物化视图的删除:drop materialized view mv_name

    二十五.索引

    用于加速数据存取的数据对象,是对数据表中一个或多个列进行排序的结构。合理的使用索引能够大大减少I/O次数,从而提高数据訪问性能。

    a.索引分类

    (1)单列索引:基于单个列所建立的索引,定义格式例如以下:Create index索引名on表名(列名);

    (2)基于两列或是多列的索引。在同一张表上能够有多个索引,可是要求列的组合必须不同。Create index 索引名 on 表名(列名1, 列名2,…… ) ;

    (3)唯一索引: 索引列上的取值唯一。Create unique index索引名on表名(列名1, 列名2,…… ) ;

    (4)非唯一索引:索引列上的取值不唯一

    (5)函数索引 适合于查询对表中字段的引用中使用了函数的情况。

    (6)逆向索引 适合建在递增或递减的列上,从而减少批量插入数据时造成的索引块竞争。可是无法进行区间扫描。

    定义语法:

    CREATE [UNIQUE] INDEX [方案名.]索引名 ON [方案名.]表名

    (列名[ASC|DESC]) reverse

    [TABLESPACE 表空间名]

    [PCTFREE]

    [INITRANS]

    [MAXTRANS]

    [STORAGE CLAUSE]

    [LOGGING|NOLOGGING]

    (7)B*树索引 全部的叶子节点都在同一层,也就是不管查找哪一条数据。须要运行的I/O数据是一样的。适合进行区间扫描

    定义语法:

    CREATE [UNIQUE] INDEX [方案名.]索引名 ON [方案名.]表名

    (列名1[ASC|DESC] [,列名2[ASC|DESC]] …)

    [TABLESPACE 表空间名]

    [PCTFREE]

    [INITRANS]

    [MAXTRANS]

    [STORAGE CLAUSE]

    [LOGGING|NOLOGGING]

    (8)位图索引 对索引列有少数不同值的大表,特别适合用位图索引,因为位图索引的更新代价更大,所以适合非常少更新键值的表。

    定义语法:

    CREATE BITMAP INDEX [方案名.]索引名 ON [方案名.]表名

    (列名1[ASC|DESC] [,列名2[ASC|DESC]] …)

    [TABLESPACE 表空间名]

    [PCTFREE]

    [INITRANS]

    [MAXTRANS]

    [STORAGE CLAUSE]

    [LOGGING|NOLOGGING]

    b.索引优缺点

    优点

    (1)帮助用户提高查询速度

    (2)利用索引的唯一性来控制记录的唯一性

    (3)可以加速表与表之间的连接

    (4)降低查询中分组和排序的时间

    缺点:

    (1)存储索引占用磁盘空间

    (2)执行数据修改操作(INSERT、UPDATE、DELETE)产生索引维护

    (3) 在数据处理时回需额外的回退空间

    c.索引失效

    (1)隐式转换导致索引失效

    (2)对索引列进行运算导致索引失效

    (3)使用Oracle内部函数导致索引失效,这种应该先首先建立函数索引

    (4)以下使用会使索引失效,应避免使用;

    使用 <> 、not in 、not exist、!=

    like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理)

    单独引用复合索引里非第一位置的索引列。应总是使用索引的第一个列,如果索引是建立在多个列上, 只有在它的第一个列被where子句引用时,优化器才会选择使用该索引。

    字符型字段为数字时在where条件里不添加引号.

    当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。

    二十六.表分区

    a.表空间及分区表的概念

    (1)表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间。

    (2)分区表:当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,

    只是将表中的数据在物理上存放到一个或多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

    什么时候使用分区表:

    1) 表的大小超过2GB。

    2) 表中包含历史数据,新的数据被增加都新的分区中。

    (3)表分区的优缺点

    优点:

    1)改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

    2)增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

    3)维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

    4)均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

    缺点:

    分区表相关,已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

    b.表分区的几种类型及操作方法

    1)范围分区

    范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。

    2)列表分区

    该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

    3)散列分区

    这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。

    散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

    4)组合分区

    结合两个数据分区的方法可以组合成一个组合分区方法。首先用第一个数据分布方法对表格进行分区,然后再用第二个数据分区方法对每个分区进行二次分区

  • 相关阅读:
    [转]为Ubuntu Server安装gnome图形桌面环境
    [转]ubuntu 安装五笔输入法
    [转]更改文件所有者
    QT 透明设置
    ubuntu 交叉编译arm linux 内核
    Opencv vs 2005编译
    [转]在skyeye中运行uboot
    object的引用 与 foreach的使用
    音频和视频
    HTML5 Canvas API
  • 原文地址:https://www.cnblogs.com/kiamer2425/p/14968962.html
Copyright © 2011-2022 走看看