一、查询频繁,数据量大

索引

使用时机:表中经常查询的字段可以考虑添加索引

  • 联合索引:若能确认多个条件会同时使用时,可以将这几个条件作为联合索引。
  • 单列索引:若条件查询时,这几个条件不是同时用到的话,还是单列做索引比较好些。

例子:

  如:id,name,income三列需要做索引

  查询时同时使用:联合索引要比单列索引要快。

  查询时只用到一部分:单列索引要比联合索引快,但是实际上联合索引还是要比没有索引快。

  • 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引, 否则该索引将不会被使用。且尽可能的让字段顺序与索引顺序相一致。
  • 若某列中存在大量重复数据(如状态,支付类型等列),那么建立索引对效率没啥影响。
  • 在定义primary keyunique约束后系统自动在相应的列上创建索引。

用select 具体列代替 select *

  • 查询时哪怕很多列也不要使用select*这种写法,这样会全表扫描。  
  • 应该是用到哪列就在哪列上面加入索引,然后查询时,写清楚要select的列,这样可以调用到对应列的索引,效率会高很多。

二、查询条件注意事项

null值处理

使用时机:当某列可能存在空值时,考虑使用默认值

PS:在 where 子句中对字段进行 null 值判断,将导致引擎放弃使用索引而进行全表扫描

例子: select id from t where num is null

  可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num = 0

OR、!=、<>、like 优化

使用时机:当查询中的过滤条件存在这几种过滤方式时,会导致引擎放弃使用索引而进行全表扫描,可以考虑以下优化方案。

例子:OR优化:

select id from t where num=10

union all

select id from t where num=20

 LIKE优化:

尽量不要在where条件中使用两边都是%的like模糊查询,这样会导致全表扫描,实在不行在字段后面进行模糊匹配。如like 'li%'

IN 优化

使用时机:当查询中用到in的条件进行过滤时,可以考虑以下优化方案。

例子:IN优化:

对于连续的区间数据:使用between

select * from t_order where id between 2 and 3

对于不连续连续的区间数据:使用exists

select num from a where exists(select 1 from b where num=a.num)

三、字段类型的选择

字符型优化

1、若某列只存在数值型的数据,则该列的类型应设置为数值类型,这会降低查询和连接的性能,并会增加存储开销。

2、尽可能的使用  varchar(可变长度) 代替 char (固定长度),因为首先可变长度字段存储空间小,可以节省存储空间。

   其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

四、新增、修改优化

勤用commit

多使用commit来释放回滚点,对性能会有所提升,出错回滚时数据量也会相对少很多。

五、删除操作

删除操作有3种,先简单了解一下

drop table

1)属于DDL

2)不可回滚

3)不可带where

4)表的结构和内容都删除

5)删除速度快

使用时机:不再需要一张表的时候,用drop

truncate table

1)属于DDL

2)不可回滚

3)不可带where

4)表内容删除

5)删除速度快

使用时机:保留表而删除所有数据的时候用truncate

delete from

1)属于DML

2)可回滚

3)可带where

4)根据where对表内容删除

5)删除速度慢,需要逐行删除

使用时机:想删除部分数据行时候,用delete,并且带上where子句

六、SQL书写

使用大写

Oracle服务器总是先将小写字母转成大写后,才执行,所以使用大写时能减少Oracle的一步操作。

Oracle学习(十三)优化专题的更多相关文章

  1. Oracle之SQL优化专题01-查看SQL执行计划的方法

    在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...

  2. Oracle之SQL优化专题03-如何看懂SQL的执行计划

    专题第一篇<Oracle之SQL优化专题01-查看SQL执行计划的方法>讲到了查看SQL执行计划的方法,并介绍了各种方法的应用场景,那么这一篇就主要介绍下如何看懂SQL的执行计划.毕竟如果 ...

  3. Oracle之SQL优化专题02-稳固SQL执行计划的方法

    首先构建一个简单的测试用例来实际演示: create table emp as select * from scott.emp; create table dept as select * from ...

  4. Oracle学习(十三):闪回

    1.知识点:能够对比以下的录屏进行阅读 SQL> --1. 错误地删除了记录 SQL> --2. 错误地删除了表 SQL> --3. 查询历史记录 SQL> --4. 怎样撤销 ...

  5. Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  6. Oracle学习线路

    出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和 ...

  7. 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)

    本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...

  8. oracle数据库性能优化方案精髓整理收集回想

    oracle数据库性能优化整体法则: 一.降低数据訪问(降低硬盘房訪问次数) 二.返回更少的数据(降低网络传输或磁盘訪问) 三.降低交互次数(降低网络传输) 四.降低server开销(降低cpu及内存 ...

  9. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  10. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. Devops与敏捷二者能否结合?

    当前软件行业的趋势倾向于使应用程序开发和部署成为业务运营的重要组成部分.这些公司开始专注于实现像DevOps解决方案这样的方法,这有助于缩短产品开发时间.使用DevOps进行开发减少了交付软件所需的阶 ...

  2. openstack nova 创建虚机流程

    1文件 nova.api.openstack.coumpute.servers1函数 def create(self, req, body):1调用 (instances, resv_id) = se ...

  3. 团队作业1:团队展示&选题(歪瑞古德小队)

    目录 一.团队展示 1.1 队名:歪瑞古德小队 1.2 队员信息 1.3 项目描述 1.4 队员风采 1.5 团队分工 1.6 团队合照 1.7 团队特色 二.团队选题 2.1 Git仓库:https ...

  4. C#.WinForm 拖动文件到PictrueBox(支持跨UAC拖动)

    如程序以普通方式打开,那么DragDrop DragEnter 事件是可以正常使用的.但以管理员身份运行时,这两个方法将失效. 原因是 Windows机制(用户界面特权隔离). UIPI:用户界面特权 ...

  5. java面试题0001-区分类中重载方法的依据是什么?

    到底是根据什么来区分类中重载的方法? A:不同的返回值类型. B:不同的参数类型. C:不同的访问权限. D:不同的参数名称. 解析: Step1.我们先在DifferentiateReload类中创 ...

  6. 接口测试中GET方法的获取

    今天在这里给大家介绍一下get方法,其实这些方法大家可以看一下源码里面的介绍只需要在代码中输入: import requests help(requests) 就可以看到带有示例的解释: 现在我们来完 ...

  7. Android开发必有功能,更新版本提示,检测是否有新版本更新。下载完成后进行安装。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 给大家介绍个东西,MarkDown真的超级超级好用.哈哈.好了, 正题内容如下: 先 ...

  8. oeasy教您玩转linux010105详细手册man

    详细手册 回忆上节课 我们上节课学习了使用命令来了解命令 whatis 我们通过他来发出灵魂之问 whatis到底是干什么的?

  9. 令人蛋疼的错误提示 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab

    原文地址:http://www.cnblogs.com/pcchinadreamfly/archive/2012/04/26/2471317.html参考地址:http://blog.csdn.net ...

  10. luogu P3796 【模板】AC自动机(加强版)

    知识点:1.一定要删掉调试信息 2.数组别重名 code: #include <bits/stdc++.h> using namespace std; int n; int len[]; ...