oracle 数据库如何建立索引 如何用索引?创建索引语法:
CREATE[UNIQUE]|[BITMAP]INDEXindex_name
--unique表示唯一索引
ONtable_name([column1[ASC|DESC],column2
--bitmap,创建位图索引
[ASC|DESC],?]|[express])[TABLESPACEtablespace_name][PCTFREEn1]
--指定索引在数据块中空闲空间
[STORAGE(INITIALn2)][NOLOGGING]
--表示创建和重建索引时允许对表做DML操作 , 默认情况下不应该使用
[NOLINE][NOSORT];
--表示创建索引时不进行排序 , 默认不适用 , 如果数据已经是按照该索引顺序排列的可以使用
扩展资料:
1、如果有两个或者以上的索引 , 其中有一个唯一性索引,而其他是非唯一 , 这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)
3、小表不要简历索引
4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
5、列中有很多空值,但经常查询该列上非空记录时应该建立索引
6、经常进行连接查询的列应该创建索引
7、使用createindex时要将最常查询的列放在最前面
8、LONG(可变长字符串数据,最长2G)和LONGRAW(可变长二进制数据,最长2G)列不能创建索引
9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)
Oracle数据库中如何选择合适的索引类型凭借字典的目录,我们可以非常迅速的找到我们所需要的条目 。数据库也是如此 。凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表 。虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用 , 也不会影响数据库语句的使用 。这就好像即使字典没有目录的话,用户仍然可以使用它一样 。可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典 。数据库也是如此 。若没有建立相关索引的话,则数据库在查询记录的时候,不得不去查询整个表 。当表中的记录比较多的时候,其查询效率就会很低 。所以,合适的索引,是提高数据库运行效率的一个很好的工具 。不过,并不是说表上的索引越多越好 。过之而不及 。故在数据库设计过程中,还是需要为表选择一些合适的索引 。宁缺勿滥,这是建立索引时的一个遵循标准 。在理论上,虽然一个表可以设置无限的索引 。但是,数据库管理员需要知道,表中的索引越多,维护索引所需要的开销也就越大 。每当数据表中记录有增加、删除、更新变化的时候,数据库系统都需要对所有索引进行更新 。故数据库表中的索引绝对不是多多益善 。具体来说,在索引建立上,笔者对大家有如下建议 。建议一:在基数小的字段上要善于使用位图索引 。基数是位图索引中的一个基本的定义 , 它是指数据库表中某个字段内容中不重复的数值 。如在员工信息表中的性别字段 , 一般就只有男跟女两个值,所以 , 其基数为2;婚姻状况字段的话,则其只有已婚、未婚、离婚三种状态 , 其基数就为3;民族一览内也是只有有限的几个值 。对于要查询基数小的字段 , 如现在用户想查找所有婚姻状况为“已婚”的“女性”时,利用位图索引可以提高查询的效率 。这主要是因为标准索引是通过在索引中保存排序过的索引列以及对应的ROWID来实现的 。若我们在基数小的列上建立标准索引的话,则其会返回大量的记录 。而当我们在创建位图索引的时候,在Oracle会对整个表进行扫描,并且会为索引列的每个取值建立一个位图 。若内容相同,则在位图上会以一个相同的数字表示 。此时,若这个字段的基数比较小的话,则若需要实现对整个字段的查询的话,效率就会非常的高 。因为此时,数据库只要位图中数字相同的内容找出来即可 。除了在数据表某列基数比较小的情况下 , 采用位图索引外 , 我们往往在一些特殊的情况下,也会建议采用位图索引 。最常见的情况是,在Where限制条件中,若我们多次采用AND或者OR条件时,也建议采用位图索引 。因为当一个查询饮用了一些部署了位图索引的列的时候,这些位图可以很方便的与AND或者Or 运算符操作结合以快速的找出用户所需要的记录 。但是,这里要注意,不是在条件语句中包含运算符的时候 , 采用位图索引都能够提供比较高的效率 。一般来说,只有AND 或者OR运算符的时候,位图索引才会比较具有优势 。若此时用户采用大于号或者不等于号作为条件语句中的限制条件的时候,则往往采用标准索引具有更大的优势 。所以,笔者在数据库设置中 , 一般只有在三种情况下才采用位图索引 。一是列的基数比较小,而有可能需要根据这些字段的内容查找相关的记录;二是在条件语句中,用到了AND或者OR运算符的时候 。除了这两种情况外,最好能够采用其他适合的索引 。第三种情况是,需要用到NULL作为查询的限制条件 。因为标准查询一般情况下,会忽略所有的NULL值列 。也就是说 , 若需要查询“所有没有身份证号码”的员工的信息的时候 , 标准索引并不能够起到加速查询速度的作用 。此时 , 就需要采用位图索引 。因为位图索引会记录相关的NULL值列信息 。建议二:创建索引的一些限制条件 。并不说,表或者列建立的索引越多越好 。相反,索引建的越多 , 有时会反而会影响数据库运行的整体性能 。所以,在建立索引的时候,仍然会有一些限制条件 。一是不要对一些记录内容比较少的表建立索引 。在一个应用系统设计的时候,如设计一个ERP系统的数据库 , 其虽然有几千张表 。但是 , 并不是每张表都有大量记录的 。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条 。如员工登陆帐户密码表、企业部门信息表等等 。对于这些记录内容比较少的表 , 我们建立最好不要为其建立索引 。无论是表上的,还是字段上,都不要建立索引 。二是若表中的内容比较大 , 但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引 。如现在在ERP系统中,有一张表是“AD_Table” 。其存储的是这个数据库中相关表的信息 。这张表只有在数据库设计的时候才会用到 。故这张表中的记录虽然比较多 , 但是由于用户用的比较少 , 所以 , 一般没有必要为这张表建立列级别上的索引 。而直接用表索引来代替 。三是在一些NULL字段上,要根据实际情况来判断是否要建立索引 。如现在有一张人事档案的表格,其上面有两个字段 , 分别为“身份证号码”与“地区” 。有时会为了某个原因,企业需要所有员工都在系统中登记他们的身份证号码,以方便他们办工资卡、社会保险等等 。所以人事管理可能需要经常的查询系统,看看有没有没有身份证号码的员工信息 。此时 , 就需要利用条件“IS NULL”来查询我们所需要的记录 。故为了提高查询效率,若某个记录可能为空,并且经常需要以NULL为条件进行查询的时候,则最好给这个字段添加一个索引,并且最好建立位图索引 。相反,若虽然可能会以NULL这个条件作为查询的限制语句,但是,用的不是很多的时候,则就没有必要为其建立索引 。建议三:多表连接查询的索引设计 。如现在有一个人事管理系统 。人事经理想知道员工的社保缴纳情况 。他需要知道员工的姓名、职务、户籍性质(农民户口跟居民户口费用不一样)、缴纳的情况等等 。但是 , 这些信息包含在不同的表中 。因为为了提高数据库的性能,在表中存储的可能只是某些序号,而不是具体的内容 。如在社保表中,存储的是员工对应的编号,而不是员工的名字 。所以 , 要得到这份报表的话,就可能需要关联员工基本信息表、公司组织结构表等表格 , 才能够查询到用户所需要的内容 。为此,就需要利用Join语句,把这些表格关联起来 。为了提高数据库的查询效率,这些用来关联的字段,最好能够建立索引 。这可以显著的提高查询的速度 。建议四:在表的更新速度与查询速度之间寻求一个平衡点 。众所周知,索引本身并不影响数据库的使用,其主要是为了提高数据库的查询效率 。但是,由于当数据库的表中的数据更新的时候,包括记录的增加、删除、更改等等,都会对虽有的索引进行更新 。很明显,索引虽然可以提高查询速度 。但是,也会对一些表的更新操作产生不良的影响 。当在表中建立的索引越多,这个不利影响也会越大 。故数据库管理员在设置索引的时候,还需要注意 , 在这两个之间需要一个均衡点 。按照一般的理论来说,当某个表多数用来查询、更新相对来说比较上的话,则要多多采用索引 。相反 , 当某个表记录更新居主导,查询相对来说比较少的话,则不要建立太多的索引 , 避免对更新的速度差生不利影响 。
一个字段建有多个索引ORACLE如何选择1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表 , 在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上 , 对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是 , 则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个 , 那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引 , 一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据 。一言以蔽之 , 索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据 。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销 。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能 , 特别是对频繁更新的表来说,负面影响更大 。
【oracle索引如何选择 oracle 索引语句】关于oracle索引如何选择和oracle 索引语句的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 夜场视频用什么设备录制,夜场音乐视频
- 安卓执行linux命令行,安卓手机执行linux命令
- 虚拟机如何做系统,虚拟机如何做系统u盘
- oracle排他锁怎么加 oracle 排他锁
- c语言判断中文占几个字符,c语言判断一串字符中有多少字母
- 你家的视频是什么英文,你的视频用英语怎么说
- python爬虫多个页面,多网页爬虫
- php远程数据库服务器 php远程命令执行
- java的计数器代码,java 计数器 线程安全