oracle不空顺序输出,Oracle应用笔记

简单整理自己的oracle笔记。

1、采用excel表格中的数据直接粘贴数据库记录中,默认会在后面加一个空格“”,操作完成后一定要记得对空格匹配然后修改一下。

2、查询数据库里的所有表结构,采用select * from dba_tables(sys登录);

查看某个用户所拥有的表:select * from all_tables WHERE owner='SCOTT' ;

或者 SELECT * FROM DBA_TABLES WHERE OWNER='SCOTT';

3、上午在PL/SQL dev中建表时提示ORA-00907: 缺失右括号,检查sql脚本发现

eu_bctype           INT(50)

Oracle中int为定长的类型,不能再规定其长度,需要改成number;

4、intersect运算

返回查询结果中相同的部分既他们的交集

SQL> select * from abc

2  intersect

3  select * from abc2 ;

5、minus运算

返回在第一个查询结果中与第二个查询结果不相同的那部分行记录,

即两个结果的差集

SQL> select * from abc2

2  minus

3  select * from abc ;

6、TO_CHAR格式化小数点输出

select To_char(sum(score),9999999.99)from score;

7、有很多种方法可以用来找出哪些SQL语句需要优化,但是很久以来,最简单的方法都是分析保存在V$SQL视图中的缓存的SQL信息。通过V$SQL视图,可以确定具有高消耗时间、CUP和IO读取的SQL语句

7.1查看总消耗时间最多的前10条SQL语句

select *

from (select v.sql_id,

v.child_number,

v.sql_text,

v.elapsed_time,

v.cpu_time,

v.disk_reads,

rank() over(order by v.elapsed_time desc) elapsed_rank

from v$sql v) a

where elapsed_rank <= 10;

7.2查看CPU消耗时间最多的前10条SQL语句

select *

from (select v.sql_id,

v.child_number,

v.sql_text,

v.elapsed_time,

v.cpu_time,

v.disk_reads,

rank() over(order by v.cpu_time desc) elapsed_rank

from v$sql v) a

where elapsed_rank <= 10;

7.3查看消耗磁盘读取最多的前10条SQL语句

select *

from (select v.sql_id,

v.child_number,

v.sql_text,

v.elapsed_time,

v.cpu_time,

v.disk_reads,

rank() over(order by v.disk_reads desc) elapsed_rank

from v$sql v) a

where elapsed_rank <= 10;

8、oracle优化操作

1.不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“”代替

不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。推荐方案:用其它相同功能的操作运算代替,

如: 1)a<>0 改为 a>0 or a<0

2)a<>’’ 改为 a>’’

2. 选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须

选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.

3.WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

4.SELECT子句中避免使用 ‘ * ‘

ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间

5.减少访问数据库的次数:

ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等;

6.在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200

7.使用DECODE函数来减少处理时间:

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.DECODE(input_value,value,result[,value,result…][,default_result]);

9.删除重复记录:

最高效的删除重复记录方法 ( 因为使用了ROWID)例子:

DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID)

FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);

10.用TRUNCATE替代DELETE:

当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是

恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短. (译者

按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)

11.用Where子句替换HAVING子句:

避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的

开销. (非oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可

以减少中间运算要处理的数据,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,在两个表联接时才用on的,所以在一个表的时候,就

剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having

就不能,在速度上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而

having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一

个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后

再决定放在那里

12.使用表的别名(Alias):

当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.

13.用EXISTS替代IN、用NOT EXISTS替代NOT IN:

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执

行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer

Joins)或NOT EXISTS.

例子:

(高效)SELECT * FROM  EMP (基础表)  WHERE  EMPNO > 0  AND  EXISTS (SELECT ‘X'  FROM DEPT  WHERE  DEPT.DEPTNO = EMP.DEPTNO  AND  LOC = ‘MELB')

(低效)SELECT  * FROM  EMP (基础表)  WHERE  EMPNO > 0  AND  DEPTNO IN(SELECT DEPTNO  FROM  DEPT  WHERE  LOC = ‘MELB')

13.sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行

14.避免在索引列上使用NOT

我们要避免在索引列上使用NOT, NOT会产生和在索引列上使用函数相同的影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.

15.避免在索引列上使用计算.

WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.

举例:

低效:

SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;

高效:

SELECT … FROM DEPT WHERE SAL > 25000/12;

16.用>=替代>

高效:

SELECT * FROM  EMP  WHERE  DEPTNO >=4

低效:

SELECT * FROM EMP WHERE DEPTNO >3

两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.

17.避免在索引列上使用IS NULL和IS NOT NULL

避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入). 然而如果所有的索引列都为空,ORACLE将认为整个键值为空而空不等于空. 因此你可以插入1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引.

低效: (索引失效)

SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE IS NOT NULL;

高效: (索引有效)

SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE >=0;

18.索引的弊端

a. 如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高.

b. 在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别. 而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!

19.可能引起全表扫描的操作

在索引列上使用NOT或者“<>”

对索引列使用函数或者计算

NOT IN操作

通配符位于查询字符串的第一个字符

IS NULL或者IS NOT NULL

多列索引,但它的第一个列并没有被Where子句引用

9、oracle SQL分页查询处理

分页取11到20的记录,两种查询方法,如下,

通过rownum,然后对记录进行截取处理。

第一种的速度会比较快点,因为在tab1这层先过滤掉了一部分数据,第二种方法到最外层再进行处理

--分页查询1

SELECT TAB2.*

FROM (SELECT tab1.*, ROWNUM row_num

FROM (

--把需要分页的sql直接放进来就行了

SELECT t.* FROM T_T_DEPT t

) TAB1

WHERE ROWNUM<21

) TAB2

WHERE TAB2.row_num >10

--分页查询2

SELECT TAB2.*

FROM (SELECT tab1.*, ROWNUM row_num

FROM (

--把需要分页的sql直接放进来就行了

SELECT t.* FROM T_T_DEPT t

) TAB1

) TAB2

WHERE TAB2.row_num BETWEEN 11 AND 20

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonasyncio并发编程实战_python异步编程之asyncio(百万并发)

[python异步编程之asyncio(百万并发)]前言&#xff1a;python由于GIL(全局锁)的存在&#xff0c;不能发挥多核的优势&#xff0c;其性能一直饱受诟病。然而在IO密集型的网络编程里&#xff0c;异步处理比同步处理能提升成百上千倍的效率&#xff0c;弥补了python性能方面的短板…

oracle序时账是什么,序时账和明细账区别是什么

序时账和明细账区别&#xff1a;一、定义不同:1、明细账也称明细分类账&#xff0c;是根据总账科目所属的明细科目设置的&#xff0c;,用于分类登记某一类经济业务事项&#xff0c;提供有关明细核算资料。2、而序时账了&#xff0c;也称日记账&#xff0c;是指按照经济业务发生…

arp攻击 python_python之arp攻击

----------------------------------------看到上面的代码&#xff0c;你笑了吗&#xff1f;--------------------------------------------------------------------------------------------好了&#xff0c;不胡闹了。正点来了&#xff1a;#!/usr/bin/python3# -*- coding: …

php 空格用什么表示方法,php用空格代替标点符号

cf 730i题意:有n个人,每个人有两个能力值,选a个人用它的第一个能力值,b个人用它的第二个能力值,每个人只能选一次,求一个方案使得能力值之和最大,并输出选择方案. 题解:最小费用最大流,原点1向n个人每个人i ...JavaScript事件关于JavaScript事件讲解得很全面的一篇文章:http://…

wxpython wx listctrl_wxPython - ListCtrl列表排序

13.4.2 如何对列表排序&#xff1f;在wxPython中有三个有用的方法可以对列表进行排序&#xff0c;在这一节&#xff0c;我们将按照从易到难的顺序来讨论。在创建的时候告诉列表去排序对一个列表控件排序的最容易的方法&#xff0c;是在构造函数中告诉该列表控件对项目进行排序。…

oracle的知识,oracle的基本知识

OracleSqlServer2000 2005MySqlDB2ORACLE sun SUN数据库 DataBase db存储数据数据 Data数字 符号 字符 信息DBMS 数据库管理系统SQL : 结构化查询语言笔试: scjp sql 20 - 30%Oracle 10g XEOracle 9iSQL:CRUD增删改查DDLDMLDCL: DBA查询数据库中所有的表:select …

linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆

最近&#xff0c;我们想对MongoDB在大量连接中的行为进行基准测试。这使我不得不重新讨论该主题&#xff0c;并刷新关于如何在Linux服务器上创建大量连接和线程的记忆。在此过程中&#xff0c;我发现了一些没有使用过的新可调参数。MongoDB配置甚至MongoDB本身也可以选择限制传…

ui li 菜单 点击添加下级_【Qt开发】实现系统托盘,托盘菜单,托盘消息

概述系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域&#xff0c;linux在布告栏区域。应用程序系统托盘功能&#xff0c;是比较普遍的功能&#xff0c;本篇将详细的介绍如何实现该功能。演示Demo实现功能&#xff1a;1.应用启动后&#xff0c;任…

linux命令date的功能,Linux 命令date

1.命令名称(Command Name)&#xff1a;data2.命令作用(Command Function)&#xff1a;打印或设置系统日期和时间(print or set the system date and time)3.命令描述(Command Description)&#xff1a;显示当前时间在给定的格式&#xff0c;或设置系统日期。( Display the cur…

python组合数据分类_Python解决数据样本类别分布不均衡问题

所谓不平衡指的是&#xff1a;不同类别的样本数量差异非常大。数据规模上可以分为大数据分布不均衡和小数据分布不均衡。大数据分布不均衡&#xff1a;例如拥有1000万条记录的数据集中&#xff0c;其中占比50万条的少数分类样本便于属于这种情况。小数据分布不均衡&#xff1a;…

5g通用模组是什么_中国移动联合芯讯通发布5G终端、芯片及测试产业报告

11月19日&#xff0c;2020中国移动全球合作伙伴大会以“5G融入百业 数智引领未来”为主题在广州召开&#xff0c;从多个维度展现了中国移动运用5G技术驱动各行业转型升级的强大实力。并于21日在展会现场发布了《5G终端、芯片及测试产业报告》。5G终端、芯片及测试产业报告发布现…

dell网卡linux驱动,DELL R710 服务器 Linux 系统网卡驱动安装

DELL R710在装完AS4U7版本的Linux后发现&#xff0c;网卡没有识别出来。怀疑是网卡驱动没有装上&#xff0c;打电话给DELL的工程师&#xff0c;得到的答复是装系统前必须用随机带的引导盘来安装才能将网卡驱动装上。现在系统已经装完了&#xff0c;总不能重装一遍吧&#xff0c…

博客网站源代码_详解SEO布词以及网站排名优化技巧

首先&#xff0c;谈谈新手以及老手在认知上容易出现的SEO误区&#xff0c;我认为有以下几点因素&#xff0c;不容忽视。1、SEO优化就是为了排名、就是发外链不少人认为做SEO就是为了排名&#xff0c;完全不考虑网站文章的质量、可读性以及用户体验&#xff0c;甚至不惜使用一些…

linux编译错误 程序中有游离的,操作系统实验报告 附思考题(24页)-原创力文档...

课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名 称&#xff1a; 操作系统综合实验题 目&#xff1a; oslab 综合实验院 系&#xff1a; 计算机系班 级&#xff1a;学 号&#xff1a;学生姓名&#xff1a;指导教师&#xff1a;设计周数&#xff1a; 分散进行成 绩&…

python合并路径和文件名_Python实例 分割路径和文件名

import os.path# 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.# 根据你机器的实际情况修改下面参数.spath " D:/download/repository.7z "# case 1:p,f os.path.split(spath);print ( " dir is: " p)print ( " …

惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开

2020年&#xff0c;可以说是英特尔最难受的一年&#xff0c;多年来的挤牙膏大法也不灵了&#xff0c;面对AMD更先进的7mm制程以及更多的线程数&#xff0c;加上本身更合理的售价&#xff0c;说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁。AMD撕裂者系列发布以…

linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...

压测工具其它有用工具在这里&#xff0c;我们会讨论主要的压力测试工具&#xff0c;选择合适的压测工具&#xff0c;才能准确衡量系统性能。好的压测工具有很多&#xff0c;可能的功能如下&#xff1a;发起压力监控性能监控系统使用率生成报告基准测试无非就是看系统能力是否达…

python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

PyQt5动态(可拖动控件大小)布局控件QSplitter简介PyQt还提供了特殊的布局管理器QSplitter。它可以动态地拖动子控件之间的边界&#xff0c;算是一个动态的布局管理器&#xff0c;QSplitter允许用户拖动子控件的边界控制子控件的大小&#xff0c;并提供一个处理拖曳子控件的控制…

斐讯n1刷linux服务器,斐讯N1刷机Linux(Armbian)

一、降级N1打开ADB链接开始降级。降级后版本号不变二、第三方固件依然是上面的链接(官改v2.2)USB双头线链接HDMI借口最近的USB和电脑的USB进入线刷模式(电视不会显示任何东西&#xff0c;但是电脑会显示设备已连接)。打开上面的刷机工具刷入官改v2.2。理论刷完后重启即可进入安…

python 四足机器人运动学_撸了个四足机器人

纯粹分享一下踩过的坑…… Robot&#xff0c;男人的浪漫&#xff5e;组装完成后&#xff0c;就是这样子了&#xff1a;1 )主控&#xff1a;Raspberry Pi Zero W&#xff0c;1 个对于新手&#xff0c;这是最容易上手的硬件了。软件方面有很好的支持&#xff0c;资料非常丰富。例…