怎样建立最佳索引? 1、明确地创建索引 create index index_name on table_name(field_name) tablespace tablespace_name pctfree 5 initrans 2 maxtrans 255 storage ( minextents 1 maxextents 16382 pctincrease 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_name add 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 5 Tablespace TBS_AK01_IDX Storage( MaxExtents 32768 PctIncrease 0 FreeLists 1 FreeList 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上。
10年积累的成都做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有顺义免费网站建设让你可以放心的选择与我们合作。
对三个字段建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的问题,考虑是不是要建立唯一索引(unique),如果有学号的话,可以考虑建立唯一索引引。
再就是对经常查询,但又相对稳定的可以建立聚簇索引,提高查询效率
对三个字段建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的问题,考虑是不是要建立唯一索引(unique),如果有学号的话,可以考虑建立唯一索引引。
再就是对经常查询,但又相对稳定的可以建立聚簇索引,提高查询效率
创建索引语法:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
--unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2
--bitmap,创建位图索引
[ASC|DESC],…] | [express])[TABLESPACE tablespace_name][PCTFREE n1]
--指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)][NOLOGGING]
--表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE][NOSORT];
--表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用
扩展资料:
1、如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)
3、小表不要简历索引
4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
5、列中有很多空值,但经常查询该列上非空记录时应该建立索引
6、经常进行连接查询的列应该创建索引
7、使用create index时要将最常查询的列放在最前面
8、LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引
9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)