oracle索引

oracle 的索引

被刻印的时光 ゝ 提交于 2020-03-02 07:52:29
一、索引分类 按逻辑分: 单列索引(Single column): 单列索引是基于单列所创建的索引 复合(多列)索引(Concatenated ): 复合索引是基于两列或者多列所创建的索引 唯一索引(Unique ): 唯一索引是索引列值不能重复的索引。 非唯一索引(NonUnique ): 非唯一索引是索引列可以重复的索引。 函数索引(Function-based): Oracle中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创 建索引,这种索引称为“位图索引”。 域索引(Domain): 域索引实际为用户自定义索引,域索引主要对存储在数据库中的媒体,图像数据进行索引,这些数据在oracle中基本上 以BLOB类型存储,不同的应用存储格式也不同, oracle不可能提供某一种现成的算法对这些数据进行索引,为了能够对 这些类型数据快速访问,oracle提供了现成的接口函数,用户可以针对自己的数据格式实现这些接口函数,以达到对这些 数据的快速访问。 按物理分: 分区索引(Partitioned): 表分区后其上建立的索引与普通表建立的索引不同,其索引是分区索引。 分区表上的索引分为 2 类,即 局部索引 和 全局索引 局部索引local index 局部索引一定是分区索引 ,分区键等同于表的分区键,分区数等同于表的分区数,一句话,局部索引的分区机制和表的分区机制一样。

MongoDB高手进阶指南

不羁的心 提交于 2020-02-28 11:00:39
一、概述 (1)版本历程 0.x 起步节点 1.x 支持复制集和分片 2.x 更加丰富的数据库功能 3.x 合并了一家专门做数据库引擎的Wired Tiger公司,更加完善的周边生态环境 4.x 支持 分布式事务 MongoDB的正式版本都是 偶数版本 ,x.x.x,主要版本(x.x)大约每年升级一次,小版本主要是修复问题,通常1-2个月发布一次。 MongoDB支持原生高可用:Application通过Driver连接到Primary节点,一个Primary节点连接多个Secondary节点。 MongoDB支持 水平扩展,分片集群 :Driver连接多个Mongos,Mongos连接多个Shard,每个Shard都是一个Primary和多个Secondary。 二、复制集 主要用于 实现服务的高可用 (1)特征 MongoDB的复制集主要具备如下特征: 快速复制 :数据写入时将数据迅速复制到另一个节点。 故障转移 :在接受写入的节点发生故障的时候自动选择另一个新的节点代替。 其他作用:数据分发、读写分离、异地容灾。 (2)MongoDB的数据复制原理 一个修改 操作会被记录到oplog ,有一个 线程监听oplog ,如果有变动就会将这个变动应用到其他的数据库上。 从节点在主节点上打开一个 tailable游标 ,不断获取新加入的oplog,并在从库上 回放 。 (3

MySQL之数据库优化

人走茶凉 提交于 2020-02-27 04:39:10
Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 •表的设计合理化(符合3NF) •添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] •分表技术(水平分割、垂直分割) •读写[写: update/delete/add]分离 •存储过程 [模块化编程,可以提高速度] •对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] •mysql服务器硬件升级 •定时的去清除不需要的数据,定时进行碎片整理(MyISAM) 数据库优化工作 对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作: ① 数据库设计 ② sql语句优化 ③ 数据库参数配置 ④ 恰当的硬件资源和操作系统 此外,使用适当的存储过程,也能提升性能。 这个顺序也表现了这四个工作对性能影响的大小 数据库表设计 通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通 俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF) 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

Oracle学习笔记关于索引的扩展语句(十五)

隐身守侯 提交于 2020-02-26 13:15:33
哪些表的索引个数过多: prompt <p>当前用户下,哪些表的索引个数字超过5个的 select table_name, count(*) cnt from user_indexes group by table_name having count(*) >= 5 order by cnt desc ;  哪些表的外键未建索引:   prompt <p>将外键未建索引的情况列出 select table_name, constraint_name, cname1 || nvl2(cname2, ',' || cname2, null) || nvl2(cname3, ',' || cname3, null) || nvl2(cname4, ',' || cname4, null) || nvl2(cname5, ',' || cname5, null) || nvl2(cname6, ',' || cname6, null) || nvl2(cname7, ',' || cname7, null) || nvl2(cname8, ',' || cname8, null) columns from (select b.table_name, b.constraint_name, max(decode(position, 1, column_name, null)) cname1,

Oracle主键约束、唯一键约束、唯一索引的区别

大憨熊 提交于 2020-02-26 06:36:33
一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> create table test ( 2 id int, 3 name varchar2(20), 4 constraint pk_test primary key(id)) 5 tablespace users;

NULL SQL Server Oracle

本秂侑毒 提交于 2020-02-23 13:53:16
1.Like '%' 在SQL Server和Oracle中都查询不出来字段为NULL的行 2. NULL是不能被索引到的,is null会导致索引不能使用. 3.当索引中的两个字段中有一个是Not null,则is null是可以使用索引的,参考:Tom 271页 4.当一列中有NULL值时,count(这列)时不会把NULL计算在内,但count(*)时会把这行计算在内,不管这行中的字段是不是都是NULL 5.SQL Server中任何值与NULL计算结果还是NULL,如字符串连接,数值相加等。 Oracle 中字符串连接不是NULL,而是新的值,其它跟SQL Server是一样的 6.所有的值与NULL比较是,都是false,包括NULL=NULL 7.Order by时,当字段有NULL时,SQL Server默认是把NULL放在顶部,Oracle是放在底部。 来源: https://www.cnblogs.com/trylazy/archive/2006/04/03/365550.html

【蛙蛙推荐】Lucene.net试用

岁酱吖の 提交于 2020-02-22 04:32:41
【蛙蛙推荐】Lucene.net试用 【简介】   lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,看几个例子就会了,来回那一套儿,按部就班做几个实验就熟悉了。分析器是Lucence的精华,又分为分词和过滤两部分,而且中文分词更是难点,我的例子里是用从博客园程序中提取出来的Lucene.Net.Analysis.Cn.dll来实现中文分词的,谁有中科院的那套中科院ICTCLAS分词工具的C#版麻烦提供一下哦。性能优化也很重要,因为如果要索引的文件比较大的话,建立索引的性能就会很大的下降,你可以调整IndexWriter的几个参数来优化索引性能,还有可以用IndexWriter.Optimize()方法(这个方法主要是优化查询速度,反而使索引性能有所下降),另外就是可以用多线程来分别对不同的内容进行索引并保存到RAMDirectory里,然后再把所有的内存索引合并到FSDirectory里,甚至可以让多台服务器分别处理内容的各个部分,然后把索引结果放到一个队列里,再有一台机器去读取索引结果队列并合并索引结果。   做这个示例主要是为了演示一下Lucene.net的功能,它可以对你指定的目录里的.txt,.htm,

数据库性能优化-1

丶灬走出姿态 提交于 2020-02-16 07:13:29
出处: https://www.cnblogs.com/easypass/archive/2010/12/ 08/1900127.html 1.数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我们能快速确认瓶颈点呢,因为我们对这些慢速设备的性能数据有一些基本的认识,如网络带宽是2Mbps,硬盘是每分钟7200转等等。因此,为了快速找到SQL的性能瓶颈点,我们也需要了解我们计算机系统的硬件基本性能指标,下图展示的当前主流计算机性能指标数据。 从图上可以看到基本上每种设备都有两个指标: 延时(响应时间):表示硬件的突发处理能力; 带宽(吞吐量):代表硬件持续处理能力。 从上图可以看出,计算机系统硬件性能从高到代依次为: CPU——Cache(L1-L2-L3)——内存——SSD硬盘——网络——硬盘 由于SSD硬盘还处于快速发展阶段,所以本文的内容不涉及SSD相关应用系统。 根据 数据库 知识,我们可以列出每种硬件主要的工作内容: CPU及内存:缓存数据访问、比较、排序、事务检测、SQL解析、函数或逻辑运算; 网络:结果数据传输、SQL请求、远程数据库访问(dblink); 硬盘:数据访问、数据写入

oracle提高查询效率的34条方法

帅比萌擦擦* 提交于 2020-02-15 09:36:04
oracle提高查询效率的34条方法 1、选择最有效率的表名顺序   (只在基于规则的优化器中有效):   ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. 2、WHERE子句中的连接顺序   ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 3、SELECT子句中避免使用 " * "   ORACLE在解析的过程中, 会将"*" 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 4、减少访问数据库的次数   ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; 5、在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数   可以增加每次数据库访问的检索数据量 ,建议值为200 6、使用DECODE函数来减少处理时间  

Oracle学习笔记(十)分区索引失效的思考

允我心安 提交于 2020-02-14 17:11:34
此处只说索引失效的场景(只会影响全局索引): 结论:全局索引truncate 分区和交换分区都会导致索引失效果 局部索引truncate分区不会导致索引失效。 drop table part_tab_trunc purge; create table part_tab_trunc (id int,col2 int,col3 int,contents varchar2(4000)) partition by range (id) ( partition p1 values less than (10000), partition p2 values less than (20000), partition p3 values less than (maxvalue) ) ; insert into part_tab_trunc select rownum ,rownum+1,rownum+2, rpad('*',400,'*') from dual connect by rownum <=50000; commit; create index idx_part_trunc_col2 on part_tab_trunc(col2) local; create index idx_part_trunc_col3 on part_tab_trunc(col3) ; --