怎么查看索引oracle,建索引

怎么查看索引oracle,建索引,第1张

一、查看和建立索引
select from user_indexes where table_name = 'student'
create index i_student_num on student(num)
二、使用索引的注意点
①类型匹配
若student中num列是varchar类型,语句select from student where num = 100
该语句被转化为select from student where to_number(num) = 100,该列的索引就失效了。
②避免索引列参与计算
索引失效:select from student where num 10 > 10000
索引有效:select from student where num > 10000 / 10
③不要对索引列使用IS NULL或IS NOT NULL
原则上对某一个列建立索引的时候,该列就不应该允许为空。
索引失效:select from student where num is null

怎样建立最佳索引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上。插入、更新、删除数据产生大量db file sequential read锁等待。

创建索引: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/12671532.html

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

发表评论

登录后才能评论

评论列表(0条)

保存