ORACLE数据库知识点整理
2021/7/4 19:24:33
本文主要是介绍ORACLE数据库知识点整理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.数据库语言分类
-
数据库定义语言(DDL) 包括CREATE(创建)命令、ALTER(修改)命令、TRUNCATE(清空)命令、DROP(删除)命令等。
-
数据库操纵语言(DML) 包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)SELECT(查询)命令等。(不会自动提交事务)
-
数据库查询语言(DQL) 包括基本查询语句、Order By子句、Group By子句等。
-
事务库控制语言(TCL) 包括COMMIT(提交)命令、ROLLBACK(回滚)命令。
-
数据库控制语言(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数据库知识点整理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02在 Objective-C 中strong 和 retain有什么区别-icode9专业技术文章分享
- 2024-11-02NSString 中的 hasPrefix 有什么作用-icode9专业技术文章分享
- 2024-11-02在 C 和 Objective-C 中inline的用法是什么-icode9专业技术文章分享
- 2024-11-02文件掩码什么意思?-icode9专业技术文章分享
- 2024-11-02在 Git 提交之前运行 composer cs-fix 命令怎么实现-icode9专业技术文章分享
- 2024-11-02为 Composer 的 cs-fix 命令指定一个目录怎么实现-icode9专业技术文章分享
- 2024-11-02微信公众号开发中怎么获取用户的 unionid-icode9专业技术文章分享
- 2024-11-01lip-sync公司指南:一文读懂主要玩家和技术
- 2024-11-01Anthropic的新RAG方法——提升大型语言模型在特定领域的表现
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享