zoukankan      html  css  js  c++  java
  • 函数索引

    函数索引的概念: 基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。使用基于函数的索引有几个先决条件:

    (1) 必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。 (2) 必须使用基于成本的优化器,基于规则的优化器将被忽略。 (3) 必须设置以下两个系统参数:

    1. QUERY_REWRITE_ENABLED=TRUE
    2. QUERY_REWRITE_INTEGRITY=TRUSTED

    可以通过alter system set,alter session set在系统级或线程级设置,也可以通过在init.ora添加实现。

    这里举一个基于函数的索引的例子:

    函数索引建立及数据准备:

    SQL> create index test.ind_fun on test.testindex(upper(a));
    索引已创建。
    SQL> insert into testindex values('a',2);
    已创建 1 行。
    SQL> commit;
    提交完成。

    强制使用基于规则的优化器,所以不会使用函数索引:

    SQL> select /*+ RULE*/*  FROM test.testindex where upper(a)='A'; A       B -- ---------- a       2 Execution Plan ---------------------------------------------------------- 0  SELECT STATEMENT Optimizer=HINT: RULE 1    0   TABLE ACCESS (FULL) OF 'TESTINDEX'
    (优化器选择了全表扫描) --------------------------------------------------------------------

    使用函数索引:

    SQL> select *  FROM test.testindex where upper(a)='A'; A       B -- ---------- a       2 Execution Plan ---------------------------------------------------------- 0  SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5) 1    0   TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=2 Card=1 Bytes=5) 2    1     INDEX (RANGE SCAN) OF 'IND_FUN' (NON-UNIQUE) (Cost=1 Card=1) (使用了ind_fun索引)

    此处有一种方案,不使用函数索引,通过sql上的技巧来使用原有列上的索引。不过我觉得还不如建立函数索引来的方便。

  • 相关阅读:
    CSS 总结
    C#实现网页表单自动提交
    解析XML【C#】
    用正则表达式替换指定标签中的内容
    C#实现在winfrom程序中下载文件
    DataGridView添加复选框并向其中绑定值
    二进制数与十六进制数之间如何互相转换
    MySql数据库表类型MYISAM与InnoDB的区别
    php引用(&)变量引用,函数引用,对象引用和参数引用用法
    从git中删除 .idea 目录
  • 原文地址:https://www.cnblogs.com/weixun/p/3231484.html
Copyright © 2011-2022 走看看