一、Sql基础篇:
数据操纵语言DML:select、insert、update、delete、merge;
数据定义语言DDL:create、alter、drop、truncate;
事务控制语言TCL:commit、rollback、savepoint;
数据控制语言DCL:grant(给权限)、revoke(回收权限);
二、SQL的数据类型:1、字符型;2、数值型;3、日期型;4、大对象型;
char固定字符,最长2000个;
varchar2可变长,最长4000,最小1;
number类型;
date timestamp;
clob(存储单字节数据,文本数据);
blob(存储二进制数据);
三、子查询
四、事务的特性:
五、索引
一般sql优化有几种解决方案:1、索引;2、分区;3、物化视图;4、并行查询;
索引的目的(减少IO,体现索引的效率):
1、大表,返回的行数<5%;
2、经常使用where子句查询的列;
3、离散度高的列;
4、更新键值代价低;
5、逻辑AND、OR效率高;
6、查看索引在建在那表、列;
注:索引碎片问题:由于对表做DML操作,导致索引表块的自动更改操作,尤其是基表的delete操作会引起index,entries的逻辑删除,注意只有当一个索引块中的全部index、entry都被删除了,才会把这个索引块删除,索引对基表的delete、insert操作都会产生索引碎片问题;(可以通过index_stats视图解决)
A、HEIGHT>=4;B、PCT_USED<50%;C、DEL_LF_ROWS/LF_ROWS>0.2;当满足这三个条件,则说明索引碎片问题需要解决;
六、数据库表的设计:
1、业务需要学会切分;
2、逻辑分层(即数据库分层,基础信息表尤为重要);
3、数据库表结构设计与拆分(A、mysql水平拆分;B、分区;C、物化视图;D、中间表的方案;E、设计的方案);
七、对于结构的优化:
1、建立普通索引;
2、建立规则索引;
3、建立复合索引;
八、关系型数据库和非关系型数据库区别
九、数据切分
十、数据拆分缺点和解决方案
十一、分区表
主要针对大数据量、频繁访问,一般来讲,oracle表分区的一个区间数据最好不要大于500w条。
1、range分区:即区域分区,按照定义的区域,进行划分,一定是在创建table的时候直接指定;
2、分区索引:分区虽然可以提高查询的效率,但也仅仅是提高了数据的范围,所以我们在有必要的情况下,需要建立分区索引,从而进一步提高效率。
分区索引大体上分两大类,一类叫做local,一类叫做global;
1)、local:在每个分区上建立索引;
2)、global:一种是在全局上建立索引,这种方式分不分区都一样,一般不使用;
另一种就是自定义数据区间的索引,也叫做前缀索引,这个是非常有意义的,自定义区域值时必须要注意maxvalue;
注:分区上建立的索引必须时分区字段列。
3、hash分区:实现均匀的负载值分配,增加HASH分区可以重新分布数据。
4、list分区:按照值进行分区;
5、复合分区:把范围分区和散列分区相结合,或者范围分区和列表分区相结合;
6、间隔分区:是一种分区自动化的分区,可以指定时间间隔进行分区,这是oracle11g的新特性,这个功能在实际的工作中也非常常用。
Interval Partitioning,一直是oracle数据库引以为荣的一项技术,正是分区的存在让oracle高效的处理海量数据成为可能。
Interval Partitioning实际上是由range分区引申的,最终实现了range分区的自动化。