ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 只做等值查询,索引键值顺序怎么建立好?

只做等值查询,索引键值顺序怎么建立好?

原创 Linux操作系统 作者:wei-xh 时间:2012-03-07 14:13:50 0 删除 编辑
表:   cs_ab01。
表大小:3G
表记录数:        1000000000
key_aac001唯一值:1000000
key_aac002唯一值:200
1.表cs_ab01,key_aac001,key_aac002列只做等值查询,key_aac001,key_aac002可能会一起出现,key_aac001可能单独出现,怎么建立索引?理由
2.表cs_ab01,key_aac001,key_aac002列总是一起出现在谓词里,key_aac001等值,key_aac002范围查询,怎么建立索引?理由
3.表cs_ab01,key_aac001,key_aac002列总是做等值查询,总是一起出现,该怎么建立索引?理由
一个公司的面试题。第三个情形值得讨论。
 
create table wxh_tbd (id number,name varchar2(4000));
insert /*+ append */ into wxh_tbd select rownum ,lpad('a',2000) from dba_objects;
commit;
insert /*+ append */ into wxh_tbd select rownum ,lpad('a',2000) from dba_objects;
commit;
create index t on wxh_tbd(name,id);
create index t1 on wxh_tbd(id,name);
 
Index                                      Leaf
Name                           BLV         Blks
------------------------------ --- ------------
T                                7       14,830
T1                               2       14,830
 
由于索引分支节点并不是存储所有的索引键值,而是只存储必须的索引键值。
但是由于本例里的name都一样,因此索引分支节点里必须再存储object_id来区别。而且由于name字段较长,就导致分支的节点数非常的多,于是就产生了belevel为7的索引树。
看来把唯一值较多的放在索引键值的前面,这个准则还是有效的,只是大家可能只是知道这个准则,并不清楚为什么。
但是无论是那种建立索引的方式,索引的叶子块都是一样的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-717937/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2306654