博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于函数的索引+创建基于函数的索引
阅读量:7088 次
发布时间:2019-06-28

本文共 1086 字,大约阅读时间需要 3 分钟。

基于函数的索引

1基于函数的索引是常规的B树索引。
2该索引存放的数据是由表中的数据应用函数后得到的,而不是直接存放表中的数据本身。
3如果查询条件包含与索引相同的函数,就可以使用基于函数的索引,提高查询速度
举例

测试表 create  table student2(sno varchar2(10) primary key,sname varchar2(20),sage number(2),cno  varchar2(2));insert into zhou.student2 values('1','LILIA',18,'1');insert into zhou.student2 values('2','LILIB',18,'1');这个时候select sname  from student2 where sname='lilia';是查不来数据的,要想忽略大小写,那么可以这样写select sname  from student2 where upper(sname)=upper('lilia');但是这个会引发一个问题?这样实现的话,某一列的普通B树索引还有用吗?没有用用户使用这种查询方式,用户不是基于表中的存储记录进行搜索的,即使在某一列上建立了索引,但是oracle会被破执行全表搜索,为遇到的每一行都计算upper()函数。如果解决?使用基于函数的索引

创建基于函数的索引

1可以提高在查询条件中使用函数和表达式时查找的执行速度
2如果用户在自己模式中创建基于函数的索引,那么必须具有query rewrite系统权限;
如果用户想要在其他模式中创建基于函数的索引,需要create any index和global query rewrite权限
3创建基于函数的索引时,oracle会首先对包含索引列的函数值或者表达式值进行求值,然后对求职后的结果进行排序,最后存储到索引中。

举例

create index sname_index on zhou.student2(upper(sname))

tablespace MYSPACE;
这里写图片描述

查询条件包含与索引相同的函数

select sname from zhou.student2 where upper(sname)=upper(‘lilia’);
这里写图片描述

select ….upper(sname):对该列使用的函数与基于函数的索引使用的函数一样,查询的时候就使用基于函数的索引,不全表查询.

转载于:https://www.cnblogs.com/feiZhou/p/9344288.html

你可能感兴趣的文章
微信小程序开发系列五:微信小程序中如何响应用户输入事件
查看>>
程序员如何优雅的记录笔记(同步云端,图床,多端发布)
查看>>
极速高清——给你带来全新的高清视野
查看>>
数据结构之链表【上】
查看>>
Go并发实战笔记整理
查看>>
奇葩问题
查看>>
使用 Laravel 5.5+ 更好的来实现 404 响应
查看>>
PHP 网络编程小白系列 —— Accept 阻塞模型
查看>>
流畅的python读书笔记-第十六章-携(协)程
查看>>
Python学到什么程度才可以去找工作?掌握这4点足够了!
查看>>
用状态机写轮播
查看>>
人工智能在搜索中的应用
查看>>
Vue2从0到1(一):用webpack打包vue
查看>>
【Vue样式绑定】
查看>>
js删除元素方法
查看>>
yum和apt-get的区别
查看>>
Python全栈之路系列之字符串格式化
查看>>
随手记 - 疯狂触发滚轮事件的Mac触控板
查看>>
大数据相关技术有哪些?
查看>>
和 Pipelining 说再见,cURL 放弃使用管道技术
查看>>