Oracle
文章平均质量分 65
Oracle
每天都要进步一点点
工作日常技术学习、积累、总结
展开
-
Oracle如何选择合适的列作为索引?
一、简介我们都知道,索引实质上是一种数据结构,如果在表上建立了合适的索引,能够大大加快我们的查询速度,但是对于如何选择表中的哪一列作为索引,很多人其实并不是特别清楚,本文将总结一些常见的适合建立索引的字段和不适合建立索引的规则,具体如下。二、哪些情况需要创建索引?简单总结,主要有以下8个方面,适合作为索引的列:1.主键自动建立唯一索引; 2.频繁作为查询的条件的字段应该创建索引; 3.查询中与其他表关联的字段,外键关系建立索引; 4.频繁更新的字段不适合创建索引; 因为每次更...原创 2020-07-07 20:44:20 · 1407 阅读 · 0 评论 -
Oracle表连接方式总结
一、简介Oracle中主要有下面四种表连接方式:SORT MERGE JOIN(排序-合并连接); NESTED LOOPS(嵌套循环); HASH JOIN(哈希连接); CARTESIAN PRODUCT(笛卡尔积);Oracle中,通过JOIN关键字进行表连接操作,一次只能连接两张表,JOIN 操作的各步骤一般是串行的(在读取做连接的两张表的数据时可以并行读取)。需要说明两个重要的概念:驱动表与匹配表。注意这些概念只存在于NESTED LOOPS(嵌套循环)与 HASH JOIN(原创 2020-06-20 17:08:48 · 1268 阅读 · 0 评论 -
关于Oracle表访问方式的总结
一、简介Oracle访问表中记录主要有下面三种方式:全表扫描(TABLE ACCESS FULL); 通过ROWID访问表(TABLE ACCESS BY ROWID); 索引扫描(TABLE ACCESS BY INDEX SCAN);下面结合示例分别对三种访问方式进行详解。二、全表扫描(TABLE ACCESS FULL)概念:Oracle顺序访问数据表中的每一条记录,并检查每条记录是否满足where指定的过滤条件。在表很大的情况下,不太建议使用全表扫描,效率很低,除非查询出来的记原创 2020-06-17 17:36:55 · 1862 阅读 · 0 评论 -
Oracle常见索引扫描方式总结
目录一、简介二、索引唯一扫描三、索引范围扫描四、索引全扫描五、索引快速全扫描六、索引跳跃式扫描七、总结一、简介Oracle提供了五种索引扫描类型,根据具体索引类型、数据分布、约束条件以及where限制的不同进行选择:索引唯一扫描(index unique scan) 索引范围扫描(index range scan) 索引全扫描(index full scan) 索引快速扫描(index fast full scan) 索引跳跃扫描(index skip s..原创 2020-06-05 20:49:41 · 3308 阅读 · 0 评论 -
Oracle中使用DBMS_XPLAN查看执行计划的方法
一、简介DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包.DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 DBMS_XPLAN包不仅可以获取解释计划,还可以用来输出存储在AWR、SQL调试集、缓存的SQL游标,以及SQL基线中的语句计划。下面将重点讨论关于DBMS_XPLAN包在解释计划和执行计划上的应用。首先看一个经常使用的查看某条语句的解释计划的示例://登录oraclesqlplus / as sysdba//查看执行计划ex原创 2020-06-03 09:33:00 · 3875 阅读 · 0 评论 -
Oracle相同的一个SQL执行计划截然不同的解决方法
最近在项目中遇到了一个很奇怪的问题,有个结构稍微复杂点的SQL(left join了十几张表)在一个项目地A查询时两秒返回数据,但是相同的SQL部署在另外一个项目地B却花费90多秒,更奇怪的是项目地B的数据库服务器比A好很多,还有数据总行数也比项目地A的少一些,然而花费的时间却多了几十倍。这个时候我比较了一下两个项目地该条sql的执行计划,发现执行计划是截然不同的。刚开始一直以为是SQL层面的问题,不断尝试优化对应的索引,经过优化后,项目地B还是需要花费40多秒,感觉SQL层面很难进行优化了,我已经尽力原创 2020-06-02 16:09:44 · 3585 阅读 · 0 评论 -
Oracle导入导出批处理
一、简介最近,在工作中,需要用到重复导入导出oaracle数据库dmp文件,如果每次都重复导,个人感觉有点麻烦,然后就自己研究了一下,写了两个批处理文件,极大地方便oracle的导入导出。二、导出大家都知道,oracle导出的语句为:exp 数据库用户名/数据库密码@数据库服务器ip/orcl file=d:xxx.dmp statistics=none借助这个命令,首先创建一个...原创 2019-10-23 19:29:50 · 1007 阅读 · 0 评论 -
Oracle清空数据库中数据表数据的方法
一、简介最近在项目发版测试的时候,导出dmp的时候不小心把开发库中的一些脏数据导出来了,测试那边导入进去之后一堆不规范的数据,为了不影响测试结果,于是总结了一个快速清空数据库数据表所有数据的方法。二、方法(1). 第一种方法:分步骤实现【a】第一步:禁止所有的外键约束.打开plsql ,新建一个查询窗口,输入:SELECT'ALTER TABLE '|| table...原创 2019-06-06 10:44:15 · 15004 阅读 · 0 评论 -
Oracle查询优化改写技巧与案例总结四
一、简介本文是总结Oracle查询优化方法与改写技巧的第四篇文章,接着第三篇文章,继续。。。二、优化技巧【1】将结果集反向转置为一列案例:将以下结果集反向转置为一列进行展示,并且每个员工信息之后空一行。思路:利用之前说的unpivot( for in( ))语句实现即可,至于空一行,我们可以使用空值null作为占位占一行,空出来。--将结果集反向转置为一列--sel...原创 2019-01-09 16:37:30 · 956 阅读 · 0 评论 -
Oracle树查询总结
一、简介在实际项目中,经常会遇到各种级联选择器、各种多级菜单等等,这些数据通常都要在前端展示,在oracle中提供了树查询语法,可以很方便的实现查找父子节点、子父节点、祖父节点等等。要实现树查询,需要用到如下语句:select … from 数据表名称start with 条件1 --树遍历开始节点connect by 条件2 --连接条件where 条件3; --对树...原创 2019-01-14 15:32:33 · 1101 阅读 · 1 评论 -
Oracle查询优化改写技巧与案例总结三
一、简介本文是总结Oracle查询优化方法与改写技巧的第三篇文章,接着第二篇文章,继续。。。二、优化技巧【1】日期加减运算方法--日期加减select sysdate as today, --今天 sysdate + 1 as tomorrow, --明天 sysdate - 1 as yesterday, --昨天 add_month...原创 2019-01-09 16:37:21 · 850 阅读 · 0 评论 -
Oracle查询优化改写技巧与案例总结二
一、简介本文是总结Oracle查询优化方法与改写技巧的第二篇文章,接着第一篇文章,继续。。。 二、优化技巧【1】新增插入注意的几点问题:如果insert语句中没有包含默认值的列,则会添加默认值。 如果包含默认值得列,必须显式指定default,才会添加默认值,否则不会添加 如果已经显式指定了莫列的值为null或值,则不会再加上默认值。【2】复制数据表的定义和数据--...原创 2019-01-09 16:37:04 · 692 阅读 · 0 评论 -
Oracle查询优化改写技巧与案例总结一
一、简介本文将总结一些Oracle查询优化方法与改写技巧,通过一些案例说明用法,本文为观看《Oracle查询优化改写技巧与案例》一书观后的一些总结,大家有空的话可以去阅读一下,下面直接分点总结一些比较有用的优化技巧。二、优化技巧【1】. 判空处理使用is null / is not null,不能使用 = null进行判断查询结果如上图,yxlx这个字段为空,如果使用 = nu...原创 2019-01-09 16:36:54 · 3061 阅读 · 0 评论 -
Oracle踩坑之解决数值0.2只显示成.2方法
一、简介最近在做统计查询时,遇到一个数值0.2查询出来却显示.2的问题,于是查找原因,发现oracle对数值0.n转换成char类型的时候会自动忽略前面的0。本文将通过实际案例讲解怎么解决这种问题。实际项目中一个统计示例sql:select r.xqid,r.yf,r.roomid,r.floorid,r.flowid,r.campus_key,r.roombh,listagg(to...原创 2018-10-26 16:56:39 · 2810 阅读 · 0 评论 -
Oracle with..as使用方法
一、简介with..as关键字,是以‘with’关键字开头的sql语句,在实际工作中,我们经常会遇到同一个查询sql会同时查询多个相同的结果集,即sql一模一样,这时候我们可以将这些相同的sql抽取出来,使用with..as定义。with..as相当于一张中间表,可以简单理解为sql片段(类似java复用代码)。下面我们通过两个简单的示例说明with..as的使用方法。二、使用方法...原创 2018-10-27 17:20:06 · 6484 阅读 · 3 评论 -
Oracle中可以代替like进行模糊查询的方法instr(更高效)
一、简介相信大家都使用过like进行模糊匹配查询,在oracle中,instr()方法可以用来代替like进行模糊查询,大数据量的时候效率更高。本文将对instr()的基本使用方法进行详解以及通过示例讲解与like的效率对比。二、使用说明instr(sourceString,destString,start,appearPosition) 对应参数描述: instr('源字...原创 2018-10-30 22:36:03 · 19335 阅读 · 1 评论 -
Oracle工作中常用函数的总结
一、常用函数详解【a】nvl(a,b)函数: 如果a的值为空,那么取b的值with temp1 as (select '张三' as name, '10' as text from dual),temp2 as (select '' as name, '20' as text from dual),temp3 as (select '李四' as name, '' as tex...原创 2018-11-10 16:25:17 · 1118 阅读 · 0 评论 -
Oracle 数据库常用操作总结二之数据库的导入和导出
一、导出数据【a】导出整个用户数据(通过cmd命令窗口),按下面的步骤执行:1)、输入exp命令2)、输入用户名和密码,用户名一般格式:用户名@数据库IP地址/数据库名称,如果数据库在本机,可以不输入ip地址 例: lyzhxg@127.0.0.1/orcl注:输入密码时,密码不会显示3)、Enter array fetch buffer size: 4096 > /...原创 2018-11-29 15:08:43 · 503 阅读 · 0 评论 -
Oracle 逗号分割的字符串转换为可放入in的语句
一、简介最近在工作中,同事遇到一个问题,就是前台搜索条件传递过来 “2018级3年制,2018级4年制,...”这种用逗号分隔的字符串,然后后台他想使用not in来过滤数据。于是,我们一起研究了一下,以下是同事最开始写的sql:select * from (select f.*, f.nj || '级' || m.major_year || '年制' njyear ...原创 2018-12-04 15:23:33 · 10340 阅读 · 1 评论 -
Oracle exists与not exists的用法总结
一、简介exists(subquery): 如果子查询查询的结果不为空,说明子查询有值,返回真,则执行主查询sql;如果子查询查询的结果为空,说明子查询没值,返回假,则不会执行主查询sql。 not exists(subquery): not exists和exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句,否则不执行。注意:子查询中使用 NULL 仍然返...原创 2018-11-30 17:15:30 · 6810 阅读 · 0 评论 -
Oracle 数据库常用操作总结一之用户的创建、删除和赋权
一、简介本文将总结一些工作中oracle常用的操作,如:表空间的创建删除、用户的创建删除、授权等。二、用法【a】创建表空间:oracle中表空间是用于存放表内容的。在oracle中可以使用如下语句创建表空间:指定表空间名称、大小、表空间文件路径、是否自动扩展表空间等参数。打开plsql,执行如下语句:--创建表空间 名字: test_tablespace 表空间路径 ...原创 2018-11-28 20:28:04 · 780 阅读 · 0 评论 -
Oracle listagg去重distinct三种方法总结
一、简介最近在工作中,在写oracle统计查询的时候,遇到listagg聚合函数分组聚合之后出现很多重复数据的问题,于是研究了一下listagg去重的几种方法,以下通过实例讲解三种实现listagg去重的方法。二、方法首先还原listagg聚合之后出现重复数据的现象,打开plsql,执行如下sql:select t.department_name depname, ...原创 2018-12-14 10:05:09 · 60820 阅读 · 7 评论 -
Oracle分组合并数据的方法总结 wm_concat() 和 listagg()
一、简介在实际项目中进行一些统计数据时,难免会遇到需要合并数据在列表进行展示的需求。本文将讲解一下oracle 11g合并数据的两种方法 (wm_concat() 和 listagg())。示例:--with as 相当于一张临时表(一次分析,多次使用) with temp as (select 'male' as sex, 'zhangsan' as stu_name f...原创 2018-10-26 16:05:03 · 4334 阅读 · 0 评论