代码之家  ›  专栏  ›  技术社区  ›  Moeb

如何查看Oracle索引的内容?

  •  2
  • Moeb  · 技术社区  · 16 年前

    如果我有这样一张桌子:

    Table A
    ------------------------
    rowid  |  id   name
    123    |  1    A
    124    |  4    G
    125    |  2    R
    126    |  3    P
    

    id 是主键,我希望索引是这样的

    index on A.id
    -------------
    id  rowid
    1   123
    2   125
    3   126
    4   124
    

    2 回复  |  直到 16 年前
        1
  •  4
  •   Adam Musch    16 年前

    example 如何用SQL处理这个块转储,但这不适合胆小的人。

    但是,您可以这样做:

    select /* index_ffs (a [name of index]) */
           id, rowid 
      from a
     where id is not null
     order by id, rowid;
    

    Oracle不会在所有被索引的值都为null的情况下编写索引项,因此如果id可以为null,我们需要过滤掉这些值。索引提示迫使Oracle满足读取索引块而不是数据块的查询。这个“解决方案”不显示根或分支块中的数据,而块转储可以。

        2
  •  0
  •   HankerPL    7 年前

    如果您正在索引EMP\u ID-那么该特定列中的所有值都将被索引 但是,如果您需要分支/根值,我也帮不了您—但一般来说,这并不是那么重要。

    select **min**(emp_id) 
    from emp
    where emp_id < 100;
    
    select **max**(emp_id) 
    from emp
    where emp_id < 100;
    

    并相互比较( )-它只读取一行 来自对象IND\u EMP\u ID

    and then explain plan for:
    select **min**(employee_id), **max**(employee_id) 
    from employees 
    where employee_id < 100;
    

    基数40 -在最小值和最大值之间,索引中只放置了40个不同的值—所有值都来自列emp\u id。

    不要忘记,即使对于PK,您仍然可以使用B-TREE/位图索引UNIQUE或NON-UNIQUE。