数据库

oracle 函数 和 优化

我爱IT资讯库   2021/02/26

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也不会走索引


拷贝表(拷贝数据,源表名:a 目标表名:b) 
insert into b1(a, b, c) select d,e,f from b2; // 表结构已存在的情况下,复制另外的表的数据
create table test as select * from dept; –从已知表复制数据和结构
create table test as select * from dept where 1=2; –从已知表复制结构但不包括数据

 

sign:

select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;  

                1,                -1,             0

大于0的,sign之后返回1,小于0返回-1,等于0返回0

 

“||”操作符:

select ('name' || 'age' || 'address') from dual;

'nameageaddress';

作用相当于concat(concat('name' , 'age'), 'address') from dual;

 

case when then用法:

select (case
             when trunc(sysdate) > to_date('1949-12-22', 'yy-mm-dd') then 'after'
        
             when trunc(sysdate) < to_date('1949-12-22', 'yy-mm-dd') then  'before'
               end) as d
  from dual

 

'after'

 

decode用法:

 

SELECT DECODE(SIGN(5-9), 1, 'Is Positive', -1, 'Is Negative', 'Is Zero')FROM DUAL

 

‘Is Negative’;

 

sign(5-9)为sign(-4),所以结果为-1,所以是‘Is Negative’;

 

DDL:  alter,drop,truncate,create

 

DML:add,update,delete(select不是);
 

 

 

Sql语句的调整和优化。
最重要的一个原则就是在查询大数据量表的时候,表结构是否已经建立了索引,并且建立的索引是否正确。
1、在有索引的表上执行DML操作性能会变慢,因为同时要往表和索引插入数据。

2、当表中如果有组合索引时,如create index idx_tables on t_user_info(id,name,address);
   使用select语句进行查询时,where条件中一定要用到前导引,这样oracle才能用到该索引进行扫描,否则就进行全表扫描。

3、索引只能用于查找表中已经存在的数据。如果查询语句中有<>或!=的时候,oracle同样不会用到索引。解决方案:可以用 where t.name>'huangyun' or t.name<'huangyun'

4、避免使用is null或者 not null。使用技巧:null关键字通常会限制使用索引,所以在create table的时候尽量使用not null或者default,这样可以避免出现性能的问题。

5、多表查询的时候,选择最有效的表名顺序。
   ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table),将被最先处理.在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.

6、WHERE子句中的连接顺序
   ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.    
7、SELECT子句中避免使用 ‘ * ‘ 
   因为在使用*的时候,oracle会对这个*进行解析,会对*依次转换成所有的列名。这个过程是查询数字字典完成的。
   
8、最高效的删除重复记录:
   DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
   
9、用EXISTS替代IN ;使用NOT EXISTS替代NOT IN 
   低效:SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB') 
   高效:SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB') 

10、识别'低效执行'的SQL语句 
   SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, 
   SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS>0 AND BUFFER_GETS > 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 ORDER BY 4 DESC; 

11、用EXPLAIN PLAN 分析SQL语句
   通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称. 

12、WHERE子句中, 如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始, 索引将不被采用. SELECT LODGING FROM LODGING WHERE MANAGER LIKE ‘%HANMAN';--在这种情况下,ORACLE将使用全表扫描.
		
13、 索引的类型有: B-树索引,位图索引,hash索引,索引编排表,反转键索引,基于函数的索引,分区索引,本地和全局索引。 B-树索引是oracle中的通用索引,也是oracle中的默认索引,当创建索引时如果不指定特定的索引类型,oracle则默认的是B-树索引。B-树索引可以一个列上的索引,也可以是多列上的索引,但指定的列不能超过32列。索引只能在有值的列上有作用。

 

 




热门内容

09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...

[转]小规模低性能低流量网站设计原则

作者: Fenng 网址: http://www.dbanotes.net/arch/small_site... ...

divcss圆角

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit... ...

Kindle Paperwhite 越狱/加字体/支持PDF、EPUB、DjVu、FB2、CHM和DOC文档

0. 升级 官网固件升级:http://www.amazon.com/gp/help/customer/displ... ...
购物网第二阶段总结笔记3:用户注册模块

购物网第二阶段总结笔记3:用户注册模块

事先工作: 【1】建立用户表:  分析静态页面的用户信息,可以得出用户表所需的字段,建立用户表S... ...

pythonbottleweb框架简介

bottle 是一个快速,简单,轻量级的 python wsgi web 框架。单一文件,只依赖 python 标准库 ...

Android Log介绍

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w(... ...

target action版简化命令设计模式原理分析

我们知道在Cocoa程序中, 如果你想处理一个窗口的事件或者应用程序的事件, 你可以使用Delegate的方法来实现响应... ...

AHP层次分析法计算权重

一. AHP层次分析法介绍     层次分析法(Analytic Hierarchy... ...

AddingGravitytoyourUIComponents

problem you want your ui components to have gravity, so that ...

我的tmux配置

# General Setting set-option -g prefix C-a ... ...

Android适配器之---SimpleCursorAdapter

结构 继承关系 public class SimpleCusrorAdapter extends Reso... ...

008.不要在该奋斗的年纪选择去偷懒

转载地址:不要在该奋斗的年纪选择去偷懒 不要在该奋斗的年纪选择去偷懒,只有度过了一段连自己都被感动了的... ...

不能读取记录;在MSysObjects上没有读取数据权限-80040E09

当我读取ACCESS里的系统表MSysObjects时,出现:不能读取记录;在 MSysObjects 上没有读取... ...

[Django]bulk_create探究

使用django orm大批量插入的时候我们可以不使用for循环对一个一个的save而是使用 bulk_create ...

不均衡分区和绑定变量窥视导致的查询计划错误

不均衡分区和绑定变量窥视导致的查询计划错误 周一收到生成支持人员的报告,系统上一个作业启动后很长时间没有完成,其执... ...

SQLCookbook学习笔记

许多人以一种马马虎虎的态度在使用sql,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看sql究 ...

Android ImageView长按保存图片及截屏相关知识

在日常开发中,可能会需要做长按保存图片这个功能,又或者需要做个截屏分享功能。最近正好在研究这些东... ...

Ruby中的block代码块学习教程

1、什么是代码块 在Ruby中,{}或do...end之间的代码是一个代码块。代码块只能出现在一个方法的后边,它紧接在方... ...

C#方法重载(overload)方法重写(override)隐藏(new)

一、重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同... ...
用Far制作chm的简易教程

用Far制作chm的简易教程

不可否认QuickCHM是做chm电子书最简洁有效的软件了。但自从去年某次用QuickCHM做电子书的时候碰到了莫名其妙... ...

国内城市翻译

INSERT INTO `dictionary` (chinese, english) VALUES ('上海',... ...

(PHP 4, PHP 5) isset — 检测变量是否设置

说明 bool isset    ( mixed $var   [, mi... ...

在 sources.list 从 命令行,恢复默认apt存储库

问题:我正在寻找从 命令行 中恢复 /etc/apt/sources.list的最佳方法。无法引用生成这里文件的包的源代 ...
使用FastReport Studio开发报表(二)

使用FastReport Studio开发报表(二)

二、在开发环境的代码中使用 在C#中新建一个WinForm项目,并在工具栏中引用FastReport Studio的... ...

【笔记】javascript权威指南-第二章-词法结构

词法结构 //本书是指:javascript权威指南    ... ...

nfs挂载磁盘以及自启动挂载

nfs用做linux机器之间共享磁盘的服务,下面是2台linux机器之间做nfs共享以及开机自启动挂载的一个过程,... ...

Cocosconsole命令

创建一个新项目 创建一个cocos2d-js项目: cocos new projectname -l js 创 ...