ORACLE数据库知识点整理

2021/7/4 19:24:33

本文主要是介绍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(撤销)命令。

注意:DLL语句会自动提交事务!所以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)组合分区

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



这篇关于ORACLE数据库知识点整理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程