设为首页 收藏本站
查看: 763|回复: 0

[经验分享] oracle中索引的学习

[复制链接]

尚未签到

发表于 2016-7-17 13:30:45 | 显示全部楼层 |阅读模式
索引是与表关联的可选结构,它只是一种快速访问数据的途径,它只影响执行速度.
索引根本目地:提高查询效率

1.合理使用索引的原则:
a)在条件表达示中经常用到的不同值效多的列上建立索引
b)在不同值少的列上,不要创建索引或位图索引.如:’姓别’列上只有’男’和’女’,不要在这样的列上创建索引,这样不会提高查询效率.
c)在经常建立连接,但没有指定外键的列上建立索引
d)在频繁进行排序和分组的列上建立索引
e)如果排序的列有多个可以建立分组索引
f)如果条件表达示经常对某一列应用某个函数后指定查询,可以用函数索引

2.下列情况下建立了索引,但不会此使用索引
a)存在数据类型隐式转换时
如:select * from emp where empno=’123’这里存在字符转换成数字,不会使用索引
b)在建立索引的某一列上进行算术运算,不会使用索引
如:select * from emp where sal*2<1000
如果改成select * from emp where sal<1000/2这样就可以使用到索引
c)使用’<>’不等号时,不会使用索引
d)使用substr字符串函数时,不会使用索引
e)‘%’通配符放在第一位时, 不会使用索引
f)使用‘||’字符串连接符时, 不会使用索引

3.标准索引语法
创建索引语法:
Create index 索引名
On 表名(列名1,列名2……列名N)
[tablespace 为索引指定的表空间名];

重建索引语法:
Alter index 索引名 rebuild

删除索引语法:
Drop index 索引名

4.唯一索引
索引可以是唯一的,也可以是非唯一的.唯一索引可以确保在定义索引的列中,表的任意两行的值不相同.非唯一索引没有在列值上规定此限制,orcale自动为表的主键列创建唯一索引.
创建唯一索引语法:
Create unique index 索引名
On 表名(列名)

5.组合索引
组合索引是在表中的多个列上创建的索引.组合索引中列的顺序是任意的,不必是表中相邻的列.如果select语句中的where子句引用了组合索引中的所有列或大多数列,则组合索引可以提高数据检索速度.创建组合索引时,应注意定义中使用的列的顺序.通常最频繁访问的列应放置在列表的最前面.
创建组合索引语法:
Create index 索引名
On 表名(列名1,列名2……列名N)

6.反向索引
反向索引是一种特殊的索引,在索引基于含有序数的列时非常有用,如果一个标准索引基于一个含有这种数据的列,往往因为数据过于密集而降底读取性能.反向索引通过简单的反向被索引的列中的数据来解决问题,首先反向每个列键值的字节,然后在反向后的新数据上进行索引,而新数据在值的范围上分布通常比原来的有序数更均匀.因此反向键索引通常建立在一些值连续增长的列上
创建反向键索引语法:
Create index 索引名
On 表名(列名) reverse

重建反向键索引语法:
Alter index 索引名 rebuild noreverse

7.位图索引
使用位图索引适应于低基数列,也就是列的不同值数目比表行数少的列.如果某个列的值重复了超过一百次,则可以考虑在该列上创建位图索引.位图索引不应当用在频繁发生insert update delete操作上.
创建位图索引语法:
Create bitmap index 索引名
On 表名(低基数列的列名)

8.索引组织表
索引组织表的数据存储在与其关联的索引中,索引中存储的是行的实际数据而不是ROWID,对表的数据进行插入,更新或删除,只会导致对索引的更新.
创建索引组织表的语法:
Create table 表名
(
ID number(4) primary key,
列名 数据类型
)organization index
普通表与索引表的比较
普通表索引表
ROWID唯一的标识行主键唯一的标识行
隐式的ROWID列没有隐式的ROWID列
基于ROWID访问基于主键访问
顺序扫描返回所有的行完全索引扫描返回所有的行,并按主键顺序排列
支持分区不支持分区

9.获取索引信息
USER_INDEXS查询此表可获取有关当前用户已创建的索引的详细信息
USER_IND_PARTITIONS查询此表可获取有关用户已创建的分区索引的详细信息
USER_IND_COLUMNS查询此表可获取有关列(用记的索引是基于这些列创建的)的详细信息
例如:
Select INDEX_NAME(索引名),TABLE_NAME(与索引相关的表名),COLUMN_NAME(建有索引的某一列) from USER_IND_COLUMNS

10.基于函数的索引
有时可能要在某一列上常用到某一函数,可以通过建立函数索引来提高查询效率,但不能在聚合函数上建立索引.不能在LOB类型蝗列,REF类型的列或包含LOB或REF对象类型上创建函数索引.
创建函数索引语法:
Create index 索引名 on 表名 (函数名(参数));
创建表达示索引语法:
Create index 索引名 on 表名 (表达示);

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-245406-1-1.html 上篇帖子: oracle 一次插入多条 下篇帖子: oracle存储过程编写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表