如何为Oracle中的一个字段建立索引?

如何为Oracle中的一个字段建立索引?,第1张

1、可以把那些null值设置成一个特殊的值,比如"N/A"

2、where nvl(col,0) =0在col字段上创建一个函数索引。create index ind_col ontable(nvl(col,0));
这样就能用索引了。

3、输入代码:CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME)。

4、给一个表里有的可空字段增加一个默认值alter table  表名 add  constraint    itemname  defult(0) for 对应表字段。itemname 为自定义的名称。

5、给表增加字段,aleter table 表名 add itemname   int null item name,为字段名

6、更新表字段类型,ALTER TABLE 表名 ALTER COLUMN 字段名,新的类型。

强制加索引使用hint即可 例如 select /+index(table_name,index_name)/ from table_name where xxxx;

现在的问题是,如果你所查询的字段有索引,表也做过表分析,统计数据是正确的,写法也没问题。CBO会自主判断,选择合适的索引的。hint方式只是在CBO判断出错时,我们人工进行干预执行计划。尽量让CBO自己来工作。

怎样建立最佳索引1、明确地创建索引create index index_name on table_name(field_name)tablespace tablespace_namepctfree 5initrans 2maxtrans 255storage(minextents 1maxextents 16382pctincrease 0); 2、创建基于函数的索引常用与UPPER、LOWER、TO_CHAR(date)等函数分类上,例:create index idx_func on emp(UPPER(ename)) tablespace tablespace_name;3、创建位图索引对基数较小,且基数相对稳定的列建立索引时,首先应该考虑位图索引,例:create bitmap index idx_bitm on class (classno) tablespace tablespace_name;4、明确地创建唯一索引可以用create unique index语句来创建唯一索引,例:create unique index dept_unique_idx on dept(dept_no) tablespace idx_1;5、创建与约束相关的索引可以用using index字句,为与unique和primary key约束相关的索引,例:alter table table_nameadd constraint PK_primary_keyname primary key(field_name)using index tablespace tablespace_name;如何创建局部区索引?1)基础表必须是分区表2)分区数量与基础表相同3)每个索引分区的子分区数量与相应的基础表分区相同4)基础表的自分区中的行的索引项,被存储在该索引的相应的自分区中,例如create index TG_CDR04_SERV_ID_IDX on TG_CDR04(SERV_ID)Pctfree 5Tablespace TBS_AK01_IDXStorage(MaxExtents 32768PctIncrease 0FreeLists 1FreeList Groups 1)local/ 如何创建范围分区的全局索引?基础表可以是全局表和分区表create index idx_start_date on tg_cdr01(start_date)global partition by range(start_date)(partition p01_idx vlaues less than ('0106')partition p01_idx vlaues less than ('0111')partition p01_idx vlaues less than ('0401'))/如何重建现存的索引?重建现存的索引的当前时刻不会影响查询重建索引可以删除额外的数据块提高索引查询效率alter index idx_name rebuild nologging;对于分区索引alter index idx_name rebuild partition partition_name nologging;删除索引的原因?1)不再需要的索引2)索引没有针对其相关的表所发布的查询提供所期望的性能改善3)应用没有用该索引来查询数据4)该索引无效,必须在重建之前删除该索引5)该索引已经变的太碎了,必须在重建之前删除该索引语句:drop index idx_name;drop index idx_name partition partition_name;建立索引的代价?基础表维护时,系统要同时维护索引,不合理的索引将严重影响系统资源,主要表现在CPU和I/O上。

一是在索引表中,不能对非主键建立索引,。这是索引表建立的一个限制条件,数据库管理人员必须无条件的遵守。二是必须给索引表建立主键。有些数据库管理员有个习惯,在建立表的时候,一开始不设置主键。等到表维护的时候,再确定某个字段作为主键。但是,在索引表建立的时候,一开始就要指定表的主键,否则的话,会有错误产生。这也是数据库管理人员需要注意的。创建索引不是为了在sql语句中用的,而是可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

创建索引:create index emp_id1(索引名) on emp(empno,ename,deptno) ;
在创建索引时需要制定所在的表的列名,即你要在哪个或者哪些列上创建索引!
使用索引:索引一般是在查询时由数据库优化器自动进行判断是否使用,就是说就算你在某个列上创建了索引,当你在查询这个表时数据库也不一定会使用索引,因为有时候需要查询的范围比较大,如全表查询,这时数据库优化器会去判断使用索引和不使用索引哪个效率高,当然是不使用索引效率高啦!所以说一般查询时是不要指定索引的,不过索引还是得创建的!
虽说查询时不推荐指定索引,但还是可以指定的:SELECT FROM stuMarks (INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 9


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

原文地址: http://outofmemory.cn/yw/12915391.html

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

发表评论

登录后才能评论

评论列表(0条)

保存