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数据库中按用户名重建索引的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)