问:有一张大表,其中按时间字段(TIME_ID)进行表分区(按季度分区),但是如果业务人员做跨季度的大批量数据的查询时,未能走TIME_ID分区索引,导致全表扫描.此种情况该如何处理? 示例解析: 1.我们根据oracle中sh用户自带的SALES表创建一个新的分区表(TIME_ID上建季度分区:插入一个新的字段CREATE_ID,上面不建分区),步骤如下: create table SALES_1998_part ( PROD_ID       NUMBER not null, CUST_ID…
问:有一张大表,其中按时间字段(TIME_ID)进行表分区(按季度分区),但是如果业务人员做跨季度的大批量数据的查询时,未能走TIME_ID分区索引,导致全表扫描.此种情况该如何处理? 示例解析: 1.我们根据oracle中sh用户自带的SALES表创建一个新的分区表(TIME_ID上建季度分区:插入一个新的字段CREATE_ID,上面不建分区),步骤如下: create table SALES_1998_part (   PROD_ID       NUMBER not null,   CUS…
关于SQL语句分页,网上也有很多,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅. 方法1 适用于 SQL Server 任何版本 SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id 方法2 适用于 SQL Server 任何版本 --顺序写法: SELECT TOP 页大小 * FROM table1 WHERE i…
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1,1) primary key nonclustered,nick varchar(50) not null defa…
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1,1) primary key nonclustered,nick varchar(50) not null defau…
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1,1) primary key nonclustered,nick varchar(50) not null defau…
概述: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表. 下面介绍如何使用分区增加查询效率 range分区:就是区域分区 CREATE TABLE SALE ( PRODUCT_ID ), SALE_COUNT ,) ) PARTITION BY RANGE (SALE_COUNT) ( PARTITION…
本文参考了 https://blog.csdn.net/mzglzzc/article/details/46300645 一  创建和使用分区表 1.范围分区(RANGE)范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的.这种分区方式是最为常用的,并且分区键经常采用日期.当使用范围分区时,请考虑以下几个规则:1)每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值.分区键的任何值等于或者大于这个上限值的记录都会被加入到…
1.使用两边加'%'号的查询,oracle是不通过索引的,所以查询效率很低. 例如:select count(*) from lui_user_base t where t.user_name like '%cs%'; 2.like '...%'和 like'%...'虽然走了索引,但是效率依然很低. 3.有人说使用如下sql,他的效率提高了10倍,但是数据量小的时候 select count(*) from lui_user_base where rowid in (        selec…
今天把这几天做的练习复习了一下,不知道自己写得代码执行的效率如何以及要如何提高,于是乎上网开始研究一些材料,现整理如下: 首先,要了解在Oracle中Sql语句运行的机制.以下是sql语句的执行步骤:              1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义.              2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限.              3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句.      …
在<Oracle Spatial分区应用研究之一:分区与分表查询性能对比>中已经说明:按县分区+全局空间索引效率要优于按县分区+本地空间索引,因此在该实验报告中,将不再考虑按县分区+本地空间索引的组合,本次实验的实验主体为如下3个: 按县分区+全局空间索引 按市分区+本地空间索引 按省分区+本地空间索引 第一组实验: 第二组实验: 结论: 按省分区+本地空间索引效率最高 Part_query算法最优 (未完待续……)…
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启动时间为2分钟执行一次JOB,通过日志上看,该JOB已经启动.且在开始统计发票信息后就没有新的日志了,因河北广电数据库很大,猜测是统计发票的SQL 效率低.在比较小的库上执行,系统正常生成发票对帐文件,因此确认猜测为正确的.   然后,将发票统计的SQL截取出来,其中一个SQL如下: select…
注:本文来源:远方的守望者  <oracle提高查询效率的34条方法> oracle提高查询效率的34条方法 1.选择最有效率的表名顺序 (只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是…
oracle提高查询效率的34个方面全解析   在一个数据库中进行操作的时候,效率是很重要的,那么,如何提高oracle的查询效率呢?笔者将从以下几个方面进行详细解析: 1.选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在   在一个数据库中进行操作的时候,效率是很重要的,那么,如何提高oracle的查询效率呢?笔者将从以下几个方面进行详细解析: 1.选择最有效率的表名顺序(只在基于规则的优化器中有效):…
我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2)WHERE子句中…
(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2)WHERE子句中的连接顺序: Oracle采用自下而上的顺序解析WHERE子句…
经常在开发过程中会用到视图或组合查询的情况,但由于涉及表数据经常达到千万级别的笛卡尔积,而且一段查询时会反复调用,但结果输出往往不需要那么多,可以使用with将过滤或处理后的结果先缓存到临时表(此处原理不太清楚,仅代表我的理解),可以大大提高查询效率 另外,WMSYS.WM_CONCAT 这个函数可以将查询结果某列多行拼接成一个结果,非常实用 示例: /*查询当前EOMS流程组及组织架构信息create by Gemini.Liu2014-01-07*/--create or replace v…
where 子查询主要功能是控制数据行的,返回结果一般都是单行单列.多行单列.单行多列数据 单行单列 SELECT * FROM emp WHERE hiredate=( SELECT MIN(hiredate) FROM emp) ; 多行单列 (使用不多) SELECT * FROM emp WHERE (sal,job)=( SELECT sal,job FROM emp WHERE ename='SCOTT') AND ename<>'SCOTT' ; 多行单列 使用三个判断符号:IN…
1.实验目的 在上一轮的实验中,oracle 11g r2版本下,在87县市实验数据的基础上,比较了分表与分区的效率,得出了分区+全局索引效率较高的结论(见上一篇博客).不过我们尚未比较过不同的分区粒度有什么效率差异.这一轮的实验,着重于以下几个目的: 使实验场景更接近真实使用场景——使用oracle 12c,用更大的数据量进行实验. 对比分析按县分区与按省分区的查询效率. 继续比较本地空间索引与全局空间索引在不同算法下的查询效率. 2.实验数据 实验数据为全国2531个区县,要素总数为4698…
本文为原创,如需转载,请标明出处 http://www.cnblogs.com/gudu1/p/7601765.html ---- 用户权限 1.创建表空间 (创建用户之前需要创建表空间和临时表空间,若是没有创建,10g之前默认是system永久性表空间,11g改为users永久性表空间) create tablespace a_user datafile 'D:\a_user_space.dbf' size 10M autoextend on; 2.创建临时表空间(默认为temp临时表空间)…
12c以前非分区表需要转换为分区, 如果不停业务的话可以使用在线重定义,只有在表进行切换的时候会有短暂的锁表. 12c 中alter table online clause 实现了表上现有的索引有效,又不停业务. 测试一:非分区表转分区表,索引转换为oracle内部规则.-- 建非分区表create table andy_clause as select  * from user_objects where  object_id is not null;--创建非分区表索引create inde…
在做oracle跨resetlogs的不完全恢复时,如果未删除flashback area的控制文件自动备份,那么Oracle可能会从控制文件自动备份中自动探测到incarnation信息,并重置incarnation,从而导致恢复报错.(不完全恢复测试一) 在做oracle跨resetlogs的不完全恢复时,如果需要catalog归档日志,注意不要catalog不相关的归档日志,否则Oracle可能会从归档日志中自动探测到incarnation信息,并重置incarnation,从而导致恢复报…
Oracle多表连接,提高效率,性能优化 (转) 执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了.这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了.…
索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证. 除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫…
Oracle异常处理--ORA-01502:索引或这类索引的分区处于不可用状态参考自:https://www.cnblogs.com/lijiaman/p/9277149.html 1.原因分析经过查证,发现是在删除分区的时候,导致分区表上的唯一性全局索引为不可用状态,导致新的数据无法正常插入,从而引发了该错误.是不是索引不可用会导致DML操作失败呢?经过验证,发现以下特点:(1)对于非唯一性索引,如果索引不可用,是不会影响到到DML操作的:(2)对于唯一性索引,如果索引不可用,在进行DML操作…
准备工作: 蠕虫复制 文章表 增加数据到112万 语法:insert into  tableNameA  select * from tableNameB       未分区查询  54s 改变现有表分区 alter table t_article PARTITION BY RANGE (aid) (PARTITION p0 ), PARTITION p1 ) , PARTITION p2 ) , PARTITION p3 ) , PARTITION p4 ) , PARTITION p5 )…
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=03.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引…
随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降. 这个临界值,并不能一概而论,它与硬件能力.具体业务有关. 虽然在很多 MySQL 运维规范里,都建议单表不超过 500w.1000w. 但实际上,我在生产环境,也见过大小超过 2T,记录数过亿的表,同时,业务不受影响. 单表过大时,业务通常会考虑两种拆分方案:水平切分和垂直切分. 水平拆分 VS 垂直拆分 水平切分,拆分的维度是行,一般会根据某种规则或算法将表中的记录拆分到多…
1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量.调整不良SQL通常可以从以下几点切入: 检查不良的SQL,考虑其写法是否还有可优化内容 检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写 检查优化索引的使用 考虑数据库的优化器 2. 避免出现SELECT * FROM table 语句,要明确查出的字段. 注:这里有亲身体会,不用*而是具体到字段是一个很好的习惯,这样会大大增加程序的可读性,从而能够更加准确的进行语句效率分析,…
了解如何在 Oracle Enterprise Linux 5 上逐步将 Oracle RAC 10g 第 2 版升级到 Oracle RAC 11g. Oracle 数据库 11g(即,新一代网格计算).该版本在网格计算方面取得了显著进步,提供了大量令人难以置信的新特性,从而进一步改进了数据库可用性和可管理性.性能监视.诊断以及数据库升级过程.其中不乏令人印象深刻的创新功能,例如 Oracle 真正应用测试.具有实时查询功能的物理备用.新的分区方案以及结果缓存等关键特性. 基本上,将 Orac…