如何使用plsql 给一个oracle数据库中的表的字段建索引

如何使用plsql 给一个oracle数据库中的表的字段建索引,第1张

create index index_name on table_name(column_name) ;

只要你查询使用到建了索引的字段,一般都会用到索引。

--创建表

create table aaa

(

a number,

b number

);

--创建索引

create index idx_a on aaa (a);

--使用索引

select from aaa where a=1;

这句查询就会使用索引 idx_a

一、使用PLSQL导出导入ORACLE数据库:

1、打开plsql-->工具----》导出用户对象(可以导出表结构和序列、视图)

ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有者,

这样就可以将A所有者的表结构等导入到B所有者的表空间中

2、导出表结构和表数据:

1、想要导入数据库必须首先创建用户和表空间并赋权限

(1)创建用户:

(2)创建表空间:电脑开始菜单-----》找到Oracle目录----》找到数据要导入进的数据库---》打开该数据库的控制台---》然后可以创建表空间

2、导入表结构、序列和数据

(1)导入表结构和序列: plsql---》工具---》导入表

(2)导入表数据:

到此数据导入完成;

注:(1)创建的用户和表空间是和导出数据库中的用户和表空间对应的;如要从A数据库中导出B用户C表空间下的所有表、数据、序列到M数据库;则在M数据库中创建B用户

和C表 空间。

(2)oracle11数据库不能导出orcale10的数据

(3)plsql导出表数据是如果数据中用Long类型的大数据,导出格式不能是sql,只有dmp格式才可以。

如果你管理的Oracle数据库下某些应用项目有大量的修改删除 *** 作 数据索引是需要周期性的重建的

它不仅可以提高查询性能 还能增加索引表空间空闲空间大小

在ORACLE里大量删除记录后 表和索引里占用的数据块空间并没有释放

重建索引可以释放已删除记录索引占用的数据块空间

转移数据 重命名的方法可以重新组织表里的数据

下面是可以按ORACLE用户名生成重建索引的SQL脚本

SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SET PAGESIZE ; SET TERMOUT ON; SET HEADING OFF; ACCEPT username CHAR PROMPT Enter the index username: ; spool /oracle/rebuild_&username sql; SELECT REM + + || chr( ) || REM | INDEX NAME : || owner || || segment_name || lpad( | (length(owner) + length(segment_name)) ) || chr( ) || REM | BYTES : || bytes || lpad ( | (length(bytes)) ) || chr( ) || REM | EXTENTS : || extents || lpad ( | (length(extents)) ) || chr( ) || REM + + || chr( ) || ALTER INDEX || owner || || segment_name || chr( ) || REBUILD || chr( ) || TABLESPACE || tablespace_name || chr( ) || STORAGE ( || chr( ) || INITIAL || initial_extent || chr( ) || NEXT || next_extent || chr( ) || MINEXTENTS || min_extents || chr( ) || MAXEXTENTS || max_extents || chr( ) || PCTINCREASE || pct_increase || chr( ) || ); || chr( ) || chr( ) FROM dba_segments WHERE segment_type = INDEX AND owner= &username ORDER BY owner bytes DESC; spool off;

如果你用的是WINDOWS系统 想改变输出文件的存放目录 修改spool后面的路径成

spool c oraclerebuild_&username sql

如果你只想对大于max_bytes的索引重建索引 可以修改上面的SQL语句

在AND owner= &username 后面加个限制条件 AND bytes> &max_bytes

如果你想修改索引的存储参数 在重建索引rebuild_&username sql里改也可以

比如把pctincrease不等于零的值改成是零

生成的rebuild_&username sql文件我们需要来分析一下 它们是否到了需要重建的程度

分析索引 看是否碎片严重 SQL>ANALYZE INDEX &index_name VALIDATE STRUCTURE; col name heading Index Name format a col del_lf_rows heading Deleted|Leaf Rows format col lf_rows_used heading Used|Leaf Rows format col ratio heading % Deleted|Leaf Rows format SELECT name del_lf_rows lf_rows del_lf_rows lf_rows_used to_char(del_lf_rows / (lf_rows) ) ratio FROM index_stats where name = upper( &index_name );

当删除的比率大于 % 时 肯定是需要索引重建的

经过删改后的rebuild_&username sql文件我们可以放到ORACLE的定时作业里

比如一个月或者两个月在非繁忙时间运行

如果遇到ORA 错误 表示索引在的表上有锁信息 不能重建索引

那就忽略这个错误 看下次是否成功

对那些特别忙的表要区别对待 不能用这里介绍的方法

lishixinzhi/Article/program/Oracle/201311/19038

必须是dba权限用进行查询,固定写法(job的是不在这个表中):

sql:select object_type,count() from dba_objects where object_type in ('PACKAGE','PROCEDURE','FUNCTION','SEQUENCE') group by object_type;

JOB不行,得查dba_jobs

sql: select count() from dba_jobs;

1、通过PL/SQL可以直接查看某表是否建索引

2、通过SQL查询select status,T from user_indexes T

where table_name='表名'

analyze table 表名 compute statistics\x0d\analyze index 索引ID compute statistics\x0d\\x0d\如果想分析所有的表名和index名可以从视图user_tables,user_indexes取得相关的信息,自动生成SQL命令

使用索引查一条数据,需要先访问索引的数据,然后再访问表的数据,两次读 *** 作

如果全表扫描,只访问表的数据,一次读 *** 作

所以,如果查询结果占到表数据的50%以上,使用索引必然慢

再考虑到一次读 *** 作可以读多条数据,索引的结构又比表复杂

可能查询结果占到表数据的20%以上,使用索引就不如全表扫描了

因此,ORACLE的优化器是基于成本

需要经常更新统计数据,便于优化器判断使用全表扫描和索引的成本高低

以上就是关于如何使用pl/sql 给一个oracle数据库中的表的字段建索引全部的内容,包括:如何使用pl/sql 给一个oracle数据库中的表的字段建索引、ORACLE 如何只导出导入索引、在Oracle数据库中按用户名重建索引的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9785763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存