iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >基于函数的索引
  • 765
分享到

基于函数的索引

2024-04-02 19:04:59 765人浏览 独家记忆
摘要

以下内容摘自《oracle sql 高级编程》 第12.4.2章节-基于函数的索引[其中代码部分被修改,原始请参考书籍]如果一个谓语在索引列上应用了函数,则优化器不会选用该列上的索引。例如,对于谓

以下内容摘自《oracle sql 高级编程》 第12.4.2章节-基于函数的索引[其中代码部分被修改,原始请参考书籍]

如果一个谓语在索引列上应用了函数,则优化器不会选用该列上的索引。例如,对于谓语to_char(CYRQ, 'YYYY-MM-DD') = '2014-01-21',不会选用CYRQ列上的索引,因为在索引列上应用了to_char函数。这个限制可以通过表达式to_char(CYRQ)在创建基于函数的索引来克服。基于函数的索引预存函数的结果。谓语中所声明的表达式必须基于函数的索引所声明的表达式想匹配。

    基于函数的索引也可以建立在用户自定义函数上,但这个函数必须定义为确定性函数,也就是说对于这个函数的每一次执行必须返回一致的值。不遵守这一规则的用户自定义函数不能用来创建基于函数的索引。

    在代码清单12-14中,SELECT 语句使用to_char(CYRQ, 'YYYY-MM-DD') = '2014-01-21'子句来访问CK10_GHDJ表。如果没有基于函数的索引,优化器会选择全表扫描访问计划。通过表达式to_char(CYRQ, 'YYYY-MM-DD')增加了基于函数的索引INDEX_CK10_GHDJ_CYRQ2之后,优化器就为该SELECT语句选用了基于索引的访问路径。

CREATE INDEX INDEX_CK10_GHDJ_CYRQ2 ON CK10_GHDJ(TO_CHAR(CYRQ,'YYYY-MM-DD'));

SELECT COUNT(0)
  FROM CK10_GHDJ G
 WHERE TO_CHAR(G.CYRQ, 'YYYY-MM-DD') = '2014-01-21';

基于函数的索引

注意代码清单12-14中最后所打印出来的访问谓语“SYS_NC00009$”=’1000’。关于基于函数索引的一些实现上的细节列于代码清单12-15。基于函数的索引加入了一个虚拟列,所声明的表达式值作为默认值,然后在这个虚拟列上建立索引。这个虚拟列可从dba_tab_cols视图中可见,并且dba_tab_cols.data_default列显示了用来填充虚拟列的表达式。进一步的dba_ind_columns视图显示对虚拟列进行了索引。

SELECT DATA_DEFAULT, HIDDEN_COLUMN, VIRTUAL_COLUMN
  FROM DBA_TAB_COLS
 WHERE TABLE_NAME = 'CK10_GHDJ'
   AND VIRTUAL_COLUMN = 'YES';

基于函数的索引

    在增加了基于函数的索引后收集表的统计信息是很重要的。如果不收集,新的虚拟列就没有统计信息,这有可能会导致性能异常。脚本analyze_table_sfp.sql被用来收集表的统计信息并设置cascade=>true。代码12-16给出了analyze_talbe_sfp.sql脚本的内容。

代码清单12-16 Analyze_table_sfp.sql脚本

begin
  dbms_stats.gather_table_stats(ownname          => user,
                                tabname          => 'CK10_GHDJ',
                                estimate_percent => 30,
                                cascade          => true);
end;
/

         基于函数的索引也可以显示使用虚拟列来实现。在这个虚拟列上也可以增加索引。这种方法额外的好处就是你还可以使用虚拟列作为分区键来应用分区方案。在代码清单12-17中,使用virtual 关键字在表中加入了一个新的虚拟列cyrq_char。然后在cyrq_char列上建立了全局分区索引。SELECT语句的执行计划显示表使用新建的索引来访问,并且谓语to_char(CYRQ, 'YYYY-MM-DD') = '2014-01-21'被重写为谓语cyrq_char=’2014-01-21’以使用虚拟列。


您可能感兴趣的文档:

--结束END--

本文标题: 基于函数的索引

本文链接: https://www.lsjlt.com/news/43188.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Java的全文索引引擎Lucene是怎样的
    今天给大家介绍一下基于Java的全文索引引擎Lucene是怎样的。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。基于Java的全文索引引擎LuceneLucen...
    99+
    2023-06-03
  • mongodb基于索引为什么会快
    MongoDB基于索引可以提高查询效率的原因主要有以下几点:1. 减少数据扫描:索引是按照特定的字段值进行排序和存储的数据结构,可以...
    99+
    2023-08-23
    mongodb
  • MySQL基于索引的压力测试的实现
    一、模拟数据库数据 1-1 创建数据库及表脚本 - vim slap.sh #!/bin/bash HOSTNAME="localhost" PORT=...
    99+
    2024-04-02
  • 关于python的索引
    写了几天程序,深刻地感受到python语言中(特指numpy、pandas)对于数据强大的索引能力。特此总结一下: iloc和loc的区别https://www.cnblogs.com/ghllfl/p/8481576.html loc:通...
    99+
    2023-01-31
    索引 python
  • C++基础算法基于哈希表的索引堆变形
    目录问题来源问题简述问题分析代码展示问题来源 此题来自于Hackerrank中的QHEAP1问题,考查了对堆结构的充分理解。成功完成此题,对最大堆或者最小堆的基本操作实现就没什么太大...
    99+
    2024-04-02
  • 基于MongoDB数据库索引构建情况全面分析
    前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能。这时,就需要评判当前索引的构建情况是否合理。有4种方法可以使用 1...
    99+
    2024-04-02
  • MySQL5.7中的函数索引怎么用
    本篇文章给大家分享的是有关MySQL5.7中的函数索引怎么用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &nb...
    99+
    2024-04-02
  • MySQL索引基础
    介绍     索引用于加快数据访问的速度。把计算机的磁盘比作一本字典,索引就是字段的目录,当我们想快速查到某个词语的时候只需要通过查询目录找到词语所在的页数,然后直接打开某页就可以。MySQL最常用的索引是...
    99+
    2024-04-02
  • 关于Oracle Text索引
    1.Oracle Text索引类型 索引类型 描述 支持的首选项与参数 查询运算符 注意事项 CONTEXT 当文本由大型,连贯的文档(例如,MS Word,HTML或纯文本)组成时,请使用此...
    99+
    2024-04-02
  • Spring 中的函数索引需要 Go 吗?
    Spring 是一个非常流行的 Java 应用程序框架,它在处理大规模应用程序的同时提供了高效的开发方式。Spring 4.1 版本开始引入了函数索引(Function Indexing)功能,用于简化开发人员在应用程序中使用函数和方法的方...
    99+
    2023-10-11
    索引 spring 函数
  • python如何设置函数索引
    在python中使用enumerate函数来设置函数索引,具体方法如下:enumerate:enumerate()函数的作用是用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标。enumerate()函数语法:enumer...
    99+
    2024-04-02
  • 基于 Mysql 实现一个简易版搜索引擎
    目录基于 Mysql 实现一个搜索引擎一、ngram 全文解析器二、创建全文索引1、建表时创建全文索引2、通过 alter table 方式3、通过 create index 方式三...
    99+
    2024-04-02
  • MYSQL索引的基本概念
    本篇内容介绍了“MYSQL索引的基本概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &nbs...
    99+
    2024-04-02
  • 基于函数计算的 BFF 架构
    什么是 BFFBFF 全称是 Backends For Frontends (服务于前端的后端),起源于 2015 年 Sam Newman 一篇博客文章《Pattern: Backends For Frontends —— Single-...
    99+
    2023-06-04
  • 基于Java 谈回调函数
    杂谈还是习惯,写点什么之前,都喜欢来点杂谈。最近都在搞微信的开发,终于在昨晚进入测试阶段了,好快就测出 bug 来,但也好快修复了。这也让我更担心。虽说是进入内测阶段,但那代码的结构也真太难看了,还得好好重构一下。迟点得写写关于这微信公众号...
    99+
    2023-05-31
    java 回调函数 ava
  • 基于函数执行的踩坑(addEventListener)
    目录记录一次踩坑经历写法一写法二.addEventListener添加事件失败原因之一正确语法错误语法总结记录一次踩坑经历 写法一 const outer = function ()...
    99+
    2023-01-28
    函数执行的踩坑 addEventListener 函数执行addEventListener
  • Java API 中的索引函数都有哪些?
    在 Java 开发中,经常需要对集合、数组等数据结构进行查找操作。而 Java API 中提供了丰富的索引函数,方便我们快速地查找数据。本文将介绍常用的 Java API 中的索引函数。 indexOf(Object o) 和 last...
    99+
    2023-09-02
    索引 函数 api
  • python基于搜索引擎实现文章查重功能
    前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦。近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制、黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联...
    99+
    2024-04-02
  • 关于MySQL B+树索引与哈希索引详解
    目录索引介绍B+树索引优点缺点哈希索引优点缺点补充:二者区别总结 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼...
    99+
    2024-04-02
  • 关于mysql的索引是怎样的
    本篇文章给大家分享的是有关关于mysql的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、mysql中的索引是什么?索引在mys...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作