oracle索引

搜索引擎1

时间秒杀一切 提交于 2019-12-05 02:20:36
lucene 和 es 的前世今生 lucene 是最先进、功能最强大的搜索库。如果直接基于 lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。 elasticsearch 基于 lucene ,隐藏了 lucene 的复杂性,提供了简单易用的 restful api / Java api 接口(另外还有其他语言的 api 接口)。 · 分布式的文档存储引擎 · 分布式的搜索引擎和分析引擎 · 分布式,支持 PB 级数据 es 的核心概念 Near Realtime 近实时,有两层意思: · 从写入数据到数据可以被搜索到有一个小延迟(大概是 1s ) · 基于 es 执行搜索和分析可以达到秒级 Cluster 集群 集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。 Node 节点 Node 是集群中的一个节点,节点也有一个名称,默认是随机分配的。默认节点会去加入一个名称为 elasticsearch 的集群。如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成 elasticsearch 集群。 Document & field 文档是 es 中最小的数据单元,一个 document 可以是一条客户数据

关于Oracle中索引的使用

流过昼夜 提交于 2019-12-04 19:02:10
索引的 统计和使用是数据库自动完成的,不需要手动植入代码 , 开发者只需要确认对哪些字段或者字段组合是否创建索引就可以了。 字段被创建的索引不一定就非得起效,和sql语句使用的条件有关系, 比如 LIKE 关键 对索引就是无效的。 创建索引的语法为:CREATE INDEX idx_表名_字段名 ON 表名(字段名或字段组合); 如果经常 使用ORDER BY子句,进行多字段排序,使用这种复合索引比较有效。 对了 ,索引的使用一般在WERER条件中使用,也可以使用在DISTINCT去重,还可以 创建基于函数的所用,比如SELECT * FROM xxx WHERE UPPER(xxx) = 'XXX'; 如果 对UPPER函数创建索引: CREATE INDEX idx_表名_字段名 ON 表名(UPPER(xxx)); 在查询时也能提提高效率。 索引需要定期重建,主要应对数据表的更新,使得索引更精确,保证查询效率。 所以这就说明添加索引尽量对DML操作少的表字段进行比较好。 重建索引的 语法为: ALTER INDEX idx_表名_字段名 REBULID; 如果一张表里面的索引创建不合理,包括索引没有经常更新,不仅不会提升查询效率, 反而还会降低查询效率。可以考虑删除索引: 删除索引语法: DROP INDEX idx_表名_字段名 ; 那么创建索引的原则是什么呢: 1

【转】Oracle执行计划详解

浪子不回头ぞ 提交于 2019-12-04 17:34:45
简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scans, FTS) 2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup) 3)索引扫描(Index Scan或index lookup)有4种类型的索引扫描:  (1) 索引唯一扫描(index unique scan)  (2) 索引范围扫描(index range scan) 在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况:    (a) 在唯一索引列上使用了range操作符(> < <> >= <= between)    (b) 在组合索引上,只使用部分列进行查询,导致查询出多行    (c) 对非唯一索引列上进行的任何查询。    (3) 索引全扫描(index full scan)  (4) 索引快速扫描

五 Oracle里的统计信息

戏子无情 提交于 2019-12-04 12:13:44
成本值的计算是根据目标SQL所涉及的表、索引、列等相关对象的统计信息,运用CBO固有的成本值计算公示计算出来的。 什么是Oracle里的统计信息: Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息。 Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数、表块(表里的数据块)的数量、平均行长度等。 索引的统计信息 用于描述Oracle数据库里的索引的详细信息,它包含了一些典型的维度,如索引的层级、叶子块的数量、聚簇因子等。 列的统计信息 用于描述Oracle数据库里列的详细信息,它包含了一些典型的维度,如列的distinct值的数量、列的null值的数量、列的最小值、列的最大值以及直方图等。 系统统计信息 用于描述Oracle数据库所在的数据库服务器的系统处理能力,它包含了CPU和I/O这两个维度,借助这些,Oralce可以更清楚地知道目标数据库服务器的实际处理能力。 数据字典统计信息 用于描述Oracle数据库里数据字典基表(如TAB$,IND$等)、数据字典基表上的索引,以及这些数据字典基表的列的详细信息。 内部对象统计信息 用于描述Oracle数据库里的一些内部表(如X$系列表)的详细信息

堆组织表,索引组织表和索引聚簇表

南楼画角 提交于 2019-12-04 10:11:06
堆组织表,索引组织表和索引聚簇表 https://www.cnblogs.com/youngerger/p/8446399.html --- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据。 -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取全部的记录以便筛选. 而这个时候为了加快查询速度, 索引就出现了, 索引是针对少量特定字段的值拿出来进行排序存储, 并记录在表中的位置, 而因为索引是有序的, 所以就会很容易通过索引查询到具体的记录位置, 然后再根据记录位置直接从表中读取该记录. 同时因为索引的字段较少, 所以索引通常会比其基表小得多. 从上面通过索引访问表记录的方式可以看出, 当要访问的数据量较大时, 通过每一条记录的位置去访问原始记录, 每一条符合条件的记录都需要经过索引访问后再访问基表这样一个复杂的过程, 这会花费很多时间, 同样, 如果不经过索引而直接查询表, 也可能因为表字段太多, 记录较大的情况下把全部的数据读取进来, 这也会花费很多时间. 那怎么办呢? 这个时候就会想到,

[转帖]B树索引和位图索引的结构介绍

丶灬走出姿态 提交于 2019-12-04 10:10:46
B树索引和位图索引的结构介绍 http://blog.itpub.net/12679300/viewspace-1174236/ 一 前言:? ROWID :包含键值的行的行ID,( 查找块的最快方法,类似于门牌号 )? 因为所有行属于同一个段,所以要使用受限的ROWID 指向表行 索引是数据库为了提高查询效率提供的一种冗余结构,保守计算数据库50%以上的调优可以通过调整索引来进行优化; 引用国内一位资深的ORACLE专家的话:"我其实只懂点(挨踢)知识,IT里面其实只懂点甲骨文,甲骨文里面其实只懂点数据库,数据库里面其实只懂点SQL,SQL里面其实只懂点索引"——"你才是真正的专家!" 根据个人的浅薄的经验,作为DBA的日常运维会越来越少,从数据库的每个版本的更新来看,数据库系统已经趋向越来越智能话,DBA能干的活也越来越少了,如果一个DBA只能做做日常的表空间扩容、数据库的备份恢复、启停、系统的更新,那么将是很危险的一件事。而调优自古以来就是一门很高深的学问,如果能把这个做好了,那么DBA能够创造的价值和在公司的作用中,将越来越显著; 说了这么多,应该引入主题了,如果要做好调优,先从索引入手吧。 后续的章节中将陆续更新索引的一些知识,第一章从索引的类别开始吧; 二 索引在结构上的类别可划分如下:B树索引、位图索引、散列索引、反转索引等 三 索引的介绍: 1、B树索引(BTREE

[转帖]聚集索引和非聚集索引

我怕爱的太早我们不能终老 提交于 2019-12-04 10:10:40
聚集索引和非聚集索引 2013-07-23 15:53:26 huashanlunjian 阅读数 26 更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/huashanlunjian/article/details/84461527 聚集索引和非聚集索引 聚集索引:表的物理存储按照索引顺序排序。 非聚集索引:表的物理存储不按照索引顺序排序。 聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入)。但在范围查询数据比非聚集数据的速度快。 为什么聚集索引的范围查询会快呢?这里用ORACLE的聚簇因子来说明。 聚簇因子(CLUSTERING_FACTOR) 聚簇因子是ORACLE用来表示索引顺序和表顺序相似程度的。聚簇因子越小,相似度越高,聚簇因子越大,相似度越低。 当clustering factor 很高时,说明index entry(rowid) 是随机指向一些block的,在一个大的index range scan时,这样为了读取这些rowid 指向的block,就需要一次有一次重复的去读这些block。当clustering factor 值低时,说明index keys(rowid)

Oracle 创建索引

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 08:40:58
   索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内容。 哪些场合使用索引? 1.频繁使用where字句或连接条件 2.表比较大,数量多 3.列的取值范围广 4.查询结果占比比较小 索引创建 1.自动创建索引:   在创建主键约束,唯一键约束,主键约束时会自动创建索引 2.手动创建索引:   用户可以在列上创建唯一索引 索引创建 CREATE INDEX 索引名字 ON table(column); 如: create index TB_SYS_DICTIONARY_idx on TB_SYS_DICTIONARY(DICT_NAME); 创建索引之后,查看索引 select uc.index_name,uc.COLUMN_NAME,ui.uniqueness from user_indexes ui, user_ind_columns uc where ui.index_name=uc.INDEX_NAME and uc.TABLE_NAME='TB_SYS_DICTIONARY' 其中index_name,COLUMN_NAME,显示的时索引名称和表中字段名称,更多信息可以单独 查询 user_indexes,user_ind_columns这两个表,查看所有与序列有关的信息

MySQL 数据库性能优化之SQL优化【转】

自作多情 提交于 2019-12-04 07:52:14
优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 优化方法 改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标 常见误区 count(1)和count(primary_key) 优于 count(*) 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差,应为数据库对 count(*)

使用Index提示 强制使用索引

别来无恙 提交于 2019-12-04 07:04:15
虽然索引并不总会快于全表扫描,但是很多时候我们希望Oracle使用索引来执行某些SQL,这时候我们可以通过index hints来强制SQL使用index. Index Hints的格式如下: /*+ INDEX ( table [index [index]...] ) */ 我们简单看一下这个提示的用法(范例为 Oracle10g 数据库): SQL> create table t as select username,password from dba_users; Table created. SQL> create index i_t on t(username); Index created. SQL> set autotrace trace explain SQL> select /*+ index(t i_t) */ * from t where username='EYGLE'; Execution Plan ---------------------------------------------------------- Plan hash value: 2928007915 ------------------------------------------------------------------------------------ | Id |