Oracle常⽤查看表结构命令获取表:
select table_name from user_tables; //当前⽤户的表
table_name -表名
tablespace_name -表空间名
cluster_name -集名称
iot_name -IOT(Index Organized Table)索引组织表的名称
status -状态
pct_free -为⼀个块保留的空间百分⽐
pct_used -⼀个块的使⽤⽔位的百分⽐
ini_trans -初始交易的数量
max_trans -交易的最⼤数量
initial_extent -初始扩展数
next_extent -下⼀次扩展数
min_extents -最⼩扩展数
max_extents -最⼤扩展数
pct_increase -表在做了第⼀次extent后,下次再扩展时的增量,它是⼀个百分⽐值
freelists -可⽤列表是表中的⼀组可插⼊数据的可⽤块
freelist_groups -列表所属组
logging -是否记录⽇志
backed_up -指⽰⾃上次修改表是否已备份(Y)或否(N)的
num_rows -表中的⾏数
blocks -所使⽤的数据块数量
empty_blocks -空数据块的数量
avg_space -⾃由空间的平均量
chain_cnt -从⼀个数据块,或迁移到⼀个新块链接表中的⾏数
avg_row_len -⾏表中的平均长度
avg_space_freelist_blocks -⼀个freelist上的所有块的平均可⽤空间
num_freelist_blocks -空闲列表上的块数量
degree -每个实例的线程数量扫描表
instances -跨表进⾏扫描的实例数量
cache -是否是要在缓冲区⾼速缓存
table_lock -是否启⽤表锁
sample_size -分析这个表所使⽤的样本⼤⼩
last_analyzed -最近分析的⽇期
partitioned -表是否已分区
iot_type -表是否是索引组织表
temporary -表是否是暂时的
secondary -表是否是次要的对象
nested -是否是⼀个嵌套表
buffer_pool -缓冲池的表
flash_cache -智能闪存缓存提⽰可⽤于表块
cell_flash_cache -细胞闪存缓存提⽰可⽤于表块
row_movement -是否启⽤分区⾏运动
global_stats -作为⼀个整体(全球统计)表的统计的是否准确
user_stats -是否有统计
duration -临时表的时间
skip_corrupt -是否忽略损坏的块标记在表和索引扫描(ENABLED)状态的或将引发⼀个错误(已禁⽤)。monitoring -是否有监测属性集
cluster_owner -集的所有者
dependencies -⾏依赖性跟踪是否已启⽤
compression -是否启⽤表压缩
compress_for -什么样的操作的默认压缩
dropped -是否已经删除并在回收站
read_only -表是否是只读
segment_created -是否创建表段
result_cache -结果缓存表的模式注释
select table_name from all_tables; //所有⽤户的表  select table_name from dba_tables; //包括系统表
olumn    Datatype    NULL    Description
OWNER    VARCHAR2(30)    NOT NULL    属主
TABLE_NAME    VARCHAR2(30)    NOT NULL    表名
TABLESPACE_NAME    VARCHAR2(30)        表空间,分区、临时和索引组织表的值为空
CLUSTER_NAME    VARCHAR2(30)        集
IOT_NAME    VARCHAR2(30)        索引组织表的名称(如果有的话),属于溢出或映射表项。如果 iot_type 列不为空,则此列包含基表名称
STATUS    VARCHAR2(8)        如果先前的删除表操作失败,则指⽰表是否不能使⽤(⽆效)或有效(有效)。
PCT_FREE    NUMBER        块中空闲空间的最⼩百分⽐;分区表值为空
PCT_USED    NUMBER        块中使⽤空间的最⼩百分⽐;分区表值为空
INI_TRANS    NUMBER        初始事务数;分区表值为空
MAX_TRANS    NUMBER        事务的最⼤数量;分区表值为空
INITIAL_EXTENT    NUMBER        初始区域的⼤⼩(以字节为单位);分区表值为空
NEXT_EXTENT    NUMBER        ⼆级范围的⼤⼩(以字节为单位);分区表值为空
MIN_EXTENTS    NUMBER        段中允许的最⼩区段数;分区表值为空
MAX_EXTENTS    NUMBER        区段中允许的最⼤区段数;分区表值为空
PCT_INCREASE    NUMBER        范围⼤⼩的百分⽐增加;分区表值为空
FREELISTS    NUMBER        ⽤于insert操作的数据块的列表,分区表值为空
FREELIST_GROUPS    NUMBER        ⽤于insert操作的数据块的列表组,分区表值为空
LOGGING    VARCHAR2(3)        ⽇志表属性,分区表值为空
BACKED_UP    VARCHAR2(1)        上次更改后表是否已备份
NUM_ROWS*    NUMBER        表中的⾏数
BLOCKS*    NUMBER        表中使⽤的数据块的个数
EMPTY_BLOCKS*    NUMBER        表中空闲的数据块的个数
AVG_SPACE*    NUMBER        分配给表的数据块中的平均空闲空间(以字节为单位)
CHAIN_CNT*    NUMBER        在被从⼀个数据块到另⼀个表中的⾏数,或迁移到⼀个新块,需要保留⼀部分旧的rowid
AVG_ROW_LEN*    NUMBER        表中⼀⾏的平均长度(以字节为单位)
AVG_SPACE_FREELIST _BLOCKS    NUMBER        freelist的所有块的平均空间
NUM_FREELIST_BLOCKS    NUMBER        freelist 的块的个数
DEGREE    VARCHAR2(10)        扫描表的每个实例的线程数oracle登录命令
INSTANCES    VARCHAR2(10)        要扫描该表的实例数。
CACHE    VARCHAR2(5)        指⽰表是否要缓存在缓冲区缓存(y)或不(n)中。
TABLE_LOCK    VARCHAR2(8)        指⽰是否已启⽤表锁(启⽤)或禁⽤(禁⽤)。
SAMPLE_SIZE    NUMBER        ⽤于分析此表的样本⼤⼩
LAST_ANALYZED    DATE        最近分析这张表的⽇期
PARTITIONED    VARCHAR2(3)        指⽰此表是否分区。设置是如果是分区。
IOT_TYPE    VARCHAR2(12)        如果这是⼀个索引组织表,值为 IOT, IOT_OVERFLOW, 或者 IOT_MAPPING,否则为NULL
TEMPORARY    VARCHAR2(1)        当前会话只能看到它放在这个对象本⾝中的数据吗?
SECONDARY    VARCHAR2(1)        是否被ODCIIndexCreate 触发创建
NESTED    VARCHAR2(3)        指⽰表是否是嵌套表(yes)或否(NO)。
BUFFER_POOL    VARCHAR2(7)        该对象的默认缓冲池。分区表为空
ROW_MOVEMENT    VARCHAR2(8)        是否已启⽤或禁⽤分区⾏移动
GLOBAL_STATS    VARCHAR2(3)        对于分区表,指⽰数据收集表作为⼀个整体(是)或来⾃潜在的分区和⼦分区统计估计(否)
USER_STATS    VARCHAR2(3)        指⽰⽤户是否直接输⼊统计数据(是)(否)
DURATION    VARCHAR2(15)        指⽰临时表的持续时间。
SYS$SESSION: 在会话持续期间保存⾏。
SYS$TRANSACTION: ⾏后提交删除
分区表为空
SKIP_CORRUPT    VARCHAR2(8)        Oracle数据库是否忽略表和索引扫描中标记为已损坏的块(启⽤)或引发错误(禁⽤)。要启⽤此功能,运⾏ dbms_repair.s MONITORING    VARCHAR2(3)        表是否有监测属性设置
CLUSTER_OWNER    VARCHAR2(30)        表所属的集的所有者,如果有的话
DEPENDENCIES    VARCHAR2(8)        指⽰是否启⽤了⾏级依赖跟踪(启⽤)或禁⽤(禁⽤)。
COMPRESSION    VARCHAR2(8)        指⽰是否启⽤表压缩(启⽤)或禁⽤(已禁⽤);分区表为空值。
DROPPED    VARCHAR2(3)        指⽰表是否已被删除并处于回收站(是)或否(否)中;分区表为空值。
select table_name from dba_tables where owner='⽤户名'
获取表字段:
select * from user_tab_columns where Table_Name='⽤户表';
select * from all_tab_columns where Table_Name='⽤户表';
select * from dba_tab_columns where Table_Name='⽤户表';
获取表注释:
select * from user_tab_comments
--相应的还有dba_tab_comments,all_tab_comments,这两个⽐user_tab_comments多了ower列。
获取字段注释:
select * from user_col_comments
#查询⽤户所有字段信息的注释
SELECT * FROM USER_COL_COMMENTS;
#查询⽤户字段约束和字段对应关系
select * from user_cons_columns ;
#查询⽤户所有约束信息
select * from user_constraints;
select * from USER_TAB_COLS;
oracle ⼀般不会对空值进⾏⽐较,如果需要进⾏空值⽐较就⽤nvl形式进⾏⽐较如下:
select 1 from dual where nvl(null,0)=nvl(null,0);
user_indexes:    系统视图存放是索引的名称以及该索引是否是唯⼀索引等信息。
user_ind_column:  系统视图存放的是索引名称,对应的表和列等。
查看索引个数和类别:
select * from user_indexes where table_name='表名' ;
查看索引被索引的字段:
select * from user_ind_columns where index_name=upper('index_name');
创建索引:
单⼀索引:Create Index <Index-Name> On <Table_Name>(Column_Name);
复合索引: create index 索引名 on 表名(列名1,列名2);
删除索引
drop index 索引名;
Sql 优化:
1、先执⾏From ->Where ->Group By->Order By
2、执⾏From 字句是从右往左进⾏执⾏。因此必须选择记录条数最少的表放在右边。
3、对于Where字句其执⾏顺序是从后向前执⾏、因此可以过滤最⼤数量记录的条件必须写在Where⼦句的末尾,⽽对于多表之间的连接,则写在之前。
因为这样进⾏连接时,可以去掉⼤多不重复的项。 
4. SELECT⼦句中避免使⽤(*)ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个⼯作是通过查询数据字典完成的, 这意味着将耗费更多的时间
5、索引失效的情况:
 ① Not Null/Null 如果某列建⽴索引,当进⾏Select * from emp where depto is not null/is null。 则会是索引失效。
 ② 索引列上不要使⽤函数,SELECT Col FROM tbl WHERE substr(name ,1 ,3 ) = 'ABC'
或者SELECT Col FROM tbl WHERE name LIKE '%ABC%' ⽽SELECT Col FROM tbl WHERE name LIKE 'ABC%' 会使⽤索引。
 ③ 索引列上不能进⾏计算SELECT Col FROM tbl WHERE col / 10 > 10 则会使索引失效,应该改成
SELECT Col FROM tbl WHERE col > 10 * 10
 ④ 索引列上不要使⽤NOT ( != 、 <> )如:SELECT Col FROM tbl WHERE col ! = 10
应该 改成:SELECT Col FROM tbl WHERE col > 10 OR col < 10 。
6、⽤UNION替换OR(适⽤于索引列)
7. ⽤EXISTS替代IN、⽤NOT EXISTS替代NOT IN
Oracle共⽀持3种事务隔离级别:
1.      serializable
2.      read committed
3.      read only

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。