数据库优化知识

来源:互联网 发布:u盘物理损坏数据恢复 编辑:程序博客网 时间:2024/05/16 11:01
1 可以为空的列在创建索引的时候不能生效
2 强制使用索引,select /*index(table_name index_name)*/ col1,col2 from table。
3 相同的group by语句可以合并查询。
4 分表使用union all
5 alter index idx_name rebuild parallel 8; 数字代表模拟电脑核数。
6 建立中间表
7 充足的表空间
8 in换成inner join
9 select count(*)就不能利用到这个索引,因为null的记录不会进入索引,空值较多的字段不建议建索引。
10 查看系统索引空间使用情况  select * from dba_indexes;
11 整理表空间的碎片alter tablespace 表空间名 coalesce
12 找出有碎片的表空间,并收集其碎片。
       重建索引后,原有的索引被删除,这样会造成表空间的碎片。
      select 'alter tablespace '||tablespace_name||' coalesce;' from dba_free_space_coalesced where percent_blocks_coalesced!=100
       13 根据索引进行查询,检查索引是否有效.使用相应的where条件进行查询,确保使用该索引。看看使用索引后的效果如何
      select * from dba_ind_columns where index_name like '表名%'
      14 检查索引,对重建好的索引进行检查。
      select * from dba_extents where segment_name='索引名';段和区空间进行检查。
     15 查看表空间使用了哪些索引 ; from dba_segments
      16 如果出于空间或其他考虑,不能重建索引,可以整理索引:alter index 用户名.索引名 coalesce
      17 如果索引的叶子行的碎片超过10%,考虑对索引进行重建。
        alter index 用户名.索引名 rebuild tablespace 表空间名 storage(initial 初始值 next 扩展值) nologging
      18 查询index_stats表以确定索引中删除的、未填满的叶子行的百分比。
      19 分区是构建千兆字节数据系统或超高可用性系统的关键工具;
           什么时候使用分区表:
           1、表的大小超过2GB。
           2、表中包含历史数据,新的数据被增加都新的分区中。
      20 --显示数据库所有分区表的信息:
select * from DBA_PART_TABLES
--显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES
--显示当前用户所有分区表的信息:
select * from USER_PART_TABLES
--显示表分区信息 显示数据库所有分区表的详细分区信息:
select * from DBA_TAB_PARTITIONS
--显示当前用户可访问的所有分区表的详细分区信息:
select * from ALL_TAB_PARTITIONS
--显示当前用户所有分区表的详细分区信息:
select * from USER_TAB_PARTITIONS
--显示子分区信息 显示数据库所有组合分区表的子分区信息:
select * from DBA_TAB_SUBPARTITIONS
--显示当前用户可访问的所有组合分区表的子分区信息:
select * from ALL_TAB_SUBPARTITIONS
--显示当前用户所有组合分区表的子分区信息:
select * from USER_TAB_SUBPARTITIONS
--显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS
--显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS
--显示当前用户所有分区表的分区列信息:
select * from USER_PART_KEY_COLUMNS
--显示子分区列 显示数据库所有分区表的子分区列信息:
select * from DBA_SUBPART_KEY_COLUMNS
--显示当前用户可访问的所有分区表的子分区列信息:
select * from ALL_SUBPART_KEY_COLUMNS
--显示当前用户所有分区表的子分区列信息:
select * from USER_SUBPART_KEY_COLUMNS
--怎样查询出oracle数据库中所有的的分区表
select * from user_tables a where a.partitioned='YES'
--删除一个表的数据是
truncate table table_name;
--删除分区表一个分区的数据是
alter table table_name truncate partition p5;
   21 数据库存储单位:
  1、数据块Block是Oracle存储数据信息的最小单位
  2、区extent是比数据块大一级的存储结构
  3、数据段segment是与数据库对象相对应,多个extent是对应一个数据段
  4、TableSpace是存储结构中的最高层结构,表空间是可以跨物理存储的
  5、一个user对应的就是一个schema
 索引和表尽量不要建立在一个表空间下,否则影响io查询。
原创粉丝点击