一、前言 本博客只记录工作中的一次oracle sql调优记录,因为数据量过多导致的查询缓慢,一方面是因为业务太过繁杂,关联了太多表。面对复杂的业务场景,确实有些情况是需要关联很多表的。...三、Oracle执行计划 对于SQL调优,可以通过Oracle的执行计划来分析。oracle的执行计划确实是对sql进行分析的一种很好的方法。 下面介绍一下oracle的执行计划。...解释一下这些参数的意思: 基数(Rows):Oracle估计的当前步骤的返回结果集行数 字节(Bytes):执行SQL对应步骤返回的字节数 耗费(COST)、CPU耗费:Oracle估计的该步骤的执行耗费和...下面给出一篇很详细介绍oracle执行计划的博客 https://www.cnblogs.com/Dreamer-1/p/6076440.html 四、调优记录 4.1 强制索引 在加一些索引的过程,...开窗函数 用oracle开窗函数替换group by,oracle的group by有时候是很耗查询的,今天遇到一个sql查询很慢的问题,用oracle开窗函数进行替换group by提高速度。
随机记录的获取这样的需求可能会经常有,例如审核,抽查,采样,等需求,当然还有抽奖程序这样的需求。 每种数据库获取随机记录的方法也不尽相同,下面就来盘点一下各种数据库在取随机数的方法和可能存在的问题。...说完了 MYSQL ,继续来看看 ORACLE 我们还是要取随机的记录,怎么办, select * from ext_log where rownum <=3 order by dbms_random.value...那该怎么写,可以参考一下MYSQL的 想法来写这个SQL ,有助于提高效率。 数据量小和数据量大,看似是量变,但量变的太大,就不得不考虑性能问题。...SQL SERVER 又如何呢, 下面这个就是求随机值的一种方式,为什么这样写,主要原因是表的主键是不大好进行排序的和进行计算的,所以才废了这样的功夫,如果主键是方便进行计算的,则不需要这么麻烦。...,就如同本期的随机记录, Life is like a box of chocolate.
tablename(colname) indextype is ctxsys.context parameters('lexer my_lexer');--在tablename上创建索引 --使用全文检索...tablename where contains(col,'北京'); --全文索引同步 例如: 同步索引myindex:Exec ctx_ddl.sync_index ('myindex'); 实施建议:建议通过oracle...当文本从表中删除的时候,Oracle Text标记删除的文档,但是并不马上修改索引。因此,就的文档信息占据了不必要的空间,导致了查询额外的开销。
oracle学习过程中记录的一些知识点,包括sqlplus一些命令、角色、DML、DCL、DDL、数据字典、表空间、函数。...删除表中所有数据 truncate table 表名;//表结构还在,不写日志,速度快,无法找回删除的记录,隐式提交 23....扩展表空间 alter tablespace 名 add datafile '路径/文件名.dbf' size 500M以下 42. rownum是返回结果集之后oracle加上去的,所以是从1开始...43. pl/sql DECLARE v_typical_sal emp.sal%type default 2500;--工资基准 v_desc varchar2(10);--描述 v_sal...SQL%ROWCOUNT表示修改的条数,必须在修改语句和commit之间 50. START WITH ... CONNECT BY PRIOR ...
在2017-07-16的文章 区间检索SQL性能优化方法 中,我使用了创建function的方式,来解决匹配不到区间时的buffer gets过多的性能问题。...最近在解决一个客户的多表关联区间检索问题时,又琢磨了一下,发现还是可以直接使用SQL,替代原来的function,SQL还真是博大精深啊。...客户现场类似COUNTRY_IP_RANGE表(保存区间信息)的记录数是5000万,有75万记录要做区间匹配,有一部分数据是匹配不到区间的(随机取20条有10条无法匹配),用普通写法,匹配不到区间时,查一条记录大概要耗时...1秒多,这个速度是无法接受的;而优化写法不管是否能够匹配到区间,都只要0.29毫秒(处理完75万记录并将结果插入到表,一共3分35秒)。...答: 如果索引失效,在没有order by的情况下,全表扫描会随机选一条的end_ip1 >= :B1的记录,造成结果错误。索引失效时sql可以慢,但是不可以出错。
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。 ...它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。...数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。
几年前,有朋友让我帮忙优化一个SQL:根据IP地址查询对应的国家/地区(根据号码查询归属地也属类似业务)。...SQL代码如下: Select country_code From COUNTRY_IP_RANGE IP WHERE IP.Start_Ip1 <= ip_to_number1(:ip) AND...COUNTRY_IP_RANGE表记录数大概有12万条。存在一个start_IP1和end_ip1字段上的联合索引。SQL每次最多只返回一条记录。...但是光靠SQL本身已经无能为力。...老虎刘会把那些年优化的SQL(有代表性的)总结出来与SQL优化爱好者分享
刘永甫 性能优化专家,IT行业18年有余,大部分时间从事oracle数据库相关工作。2013年入职 oracle 深圳研发中心RWP部门,专门从事数据库优化相关工作。...2014年底转入售后部门SSC,专注于oracle数据库性能优化,主要为金融、通信等行业的大型数据库做性能分析与优化。个人微信公众号:sql_tigerliu....几年前,有朋友让我帮忙优化一个SQL:根据IP地址查询对应的国家/地区(根据号码查询归属地也属类似业务)。...COUNTRY_IP_RANGE表记录数大概有12万条。存在一个start_IP1和end_ip1字段上的联合索引。SQL每次最多只返回一条记录。...但是光靠SQL本身已经无能为力。
错误:sqlplus: command not found 转载自:https://www.cnblogs.com/sprinng/p/6548540.html # 调整成对应oracle地址...export ORACLE_BASE=/u01/app/oracle # 注意调整对应版本 export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 su...- root ln -s $ORACLE_HOME/bin/sqlplus /usr/bin su - oracle sqlplus /nolog
Oracle中如果需要知道一条SQL是谁执行的,可以通过v$sql的parsing_schema_name字段得到登录的schema名称,相当于SQL和会话登录信息是有绑定的。...但是最近有个SQL Server的需求,需要知道历史SQL的执行者。...如下SQL,可以找到当前SQL Server跑过的SQL,但是没用户信息, SELECT p.refcounts, p.usecounts, sqltext.text FROM sys.dm_exec_cached_plans...咨询了大师,给到的回复是,SQL Server不能通过DMV视图来查询某一个会话执行过的历史SQL,只能采集当前会话正在执行的SQl,不断采集然后保存下来才行。...无论从监控粒度,还是数据统计的角度,SQL和用户信息关联检索还是有用的,可以做到更精细的控制,不太清楚为什么微软官方没给出这样的设计,或者有其他隐藏的功能?
如果不需要删除重复记录,应该使用UNION ALL。...13.Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。...14.Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。...不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。 多利用内部函数提高Sql效率。...优化器 1.Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。
灵感来了也记不住,在这里记录一下一些sql查询,方便以后复制粘贴 往角色为st_admin的用户的user_msg表中插入一条记录。...on ur.role_id=r.id where r.role_name=#{role} ) tmp 往ids这一群用户的user_msg表中插入一条记录
执行一个 SQL 脚本文件。使用一个文件名作为参数。 mysql> source D:my.sql status s 从服务器取得状态信息。...SQL约束(Constraints) 不同数据库的约束不同,详细查看菜鸟教程的API描述。 SQL 约束用于规定表中的数据规则。 如果存在违反约束的数据行为,行为会被约束终止。...WHERE 条件查询相关语法 操作符 操作符描述 示例 AND 查询出两个条件都满足的记录。...修改 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!...删除 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
这个时候我们需要检索CheckValueString列为NULL值,ResultRemarks(该字段为空的记录) 我会这么写代码 select * from T_Check_InfoDetail where
减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms...和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) 使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表...ORACLE为管理上述3种资源中的内部花费 (11) 用Where子句替换HAVING子句: 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤....为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来....如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高. b. 在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别.
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
例如:某天的明细数据中,可能存在多条记录,只需要该天最后更新的一条记录。 思路:对分组进行排序,并编号,然后select编号为1的记录即可。
('23200000000', '23299000000', '00000000000') group by b.swjg_dm) --按税务机关分类查询两条记录...--性能最差的SQL select * from (select sql_text, disk_reads, buffer_gets, rows_processed from...v$sqlarea b order by disk_reads desc) where rownum <= 10; --最耗时的SQL select * from (select...a.SQL_TEXT, a.CPU_TIME, a.PARSING_SCHEMA_NAME from v$sql a order by cpu_time desc...适用于single instance ----Oracle数据库操作中,会用到锁表查询以及解锁和kill进程等操作 --(1)锁表查询的代码有以下的形式: select count(*) from v$
Oracle 数据库审计功能非常强大,通常包括标准审计(包括用户级审计和系统级审计)和细粒度审计。尽管如此,一不小心就容易造成性能问题。同时会把系统表空间给撑爆。...下面的内容描述的是如何将审计从系统表空间剥离以及清理Oracle审计记录,供大家参考。...----------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0...STANDARD AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL 三、清除审计记录...--也可以通过创建一个purge Job来进行清理已归档的历史审计记录 SQL> BEGIN 2 DBMS_AUDIT_MGMT.CREATE_PURGE_JOB( 3 AUDIT_TRAIL_TYPE
SQL语句按照功能分为三类,数据库操作语言,数据库定义语言,数据库控制语言。
领取专属 10元无门槛券
手把手带您无忧上云