工作中遇到的性能问题及解决方案

一、查询频繁,数据量大

索引

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

联合索引:若能确认多个条件会同时使用时,可以将这几个条件作为联合索引。

单列索引:若条件查询时,这几个条件不是同时用到的话,还是单列做索引比较好些。

例子:

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

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

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

PS:在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引, 否则该索引将不会被使用。

   且尽可能的让字段顺序与索引顺序相一致。

PS:若某列中存在大量重复数据(如状态,支付类型等列),那么建立索引对效率没啥影响。

PS:在定义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的一步操作。

转载于:https://www.cnblogs.com/riches/p/11453202.html

Oracle学习(十三)优化专题 【持续更新】相关推荐

  1. PyTorch框架学习十三——优化器

    PyTorch框架学习十三--优化器 一.优化器 二.Optimizer类 1.基本属性 2.基本方法 三.学习率与动量 1.学习率learning rate 2.动量.冲量Momentum 四.十种 ...

  2. FRM学习复习2(持续更新中..)

    (此文仅记录学习进程,加油!) FRM学习复习2(持续更新中..) Framework框架 overview of risk management风险管理概述 framework overview R ...

  3. Vue -- 指令【学习笔记】(持续更新)

    Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...

  4. CTF MISC在我眼里各种奇奇怪怪的题学习思路总结(持续更新)

    系列文章目录 MISC:图片隐写简单题学习思路总结(持续更新) CTF Crypto简单题学习思路总结(持续更新) 文章目录 系列文章目录 前言 一.二维码 1.1 QR码 1.2 Maxicode码 ...

  5. CTF MISC图片隐写简单题学习思路总结(持续更新)

    系列文章目录 第一篇文章: CTF Crypto简单题学习思路总结(持续更新) 文章目录 系列文章目录 前言 一.JPG类隐写 1.1 JPG文件末尾添加字符串 1.2 JPG文件中添加字符串 1.3 ...

  6. 问道区块链_区块链学习_v1.0.0_持续更新。。。

    本系列内容参考图 创建 共识网络 调用 部署 挖矿 消耗 编写 超级链组件 节点 多节点 账号 智能合约 合约账号 燃料耗品代币 开发者 区块 尊重原创,转载请注明出处https://blog.csd ...

  7. 数据库SQL语言学习--数据查询(持续更新中)

    数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.   ...

  8. 爱下载分享seo必经之路之搜索引擎优化算法持续更新

    你务必掌握一些比较敏感行业! 搜索引擎优化算法持续更新,考核评价系统软件逐步完善.很多优化方式都会持续降低他们的占比,并且已经开发的评定系统软件.比如,在extrampking时期,评分也在降低,但这 ...

  9. 小样本学习元学习经典论文整理||持续更新

      本文整理了近些年来有关小样本学习的经典文章,并附上了原文下载链接以及论文解读链接.关注公众号"深视",回复"小样本学习",可以打包下载全部文章.该文我会持续 ...

  10. C++学习资源汇总(持续更新中)

    以下收集汇总一些C++的学习资料(持续更新中) 网站和论坛: http://www.csdn.net/ http://www.iteye.com/ http://www.bccn.net/  编程中国 ...

最新文章

  1. 简述DNS进行域名正向解析的过程。
  2. 轻松删除git本地创建的仓库
  3. java 一个大事务下的新增、修改、查询_重新学习Mysql数据库8:MySQL的事务隔离级别实战...
  4. [C语言] va_start和va_end详解
  5. c语言中continue语句的作用是什么
  6. 永远和靠谱的人在一起!
  7. 离散数学之集合论 【上】
  8. 项目管理系列之项目范围时间及资源管理(一)
  9. 苏宁易购发全员信:双十一销售目标全面完成 力争11月EBITDA转正
  10. Shiro原理以及运行流程
  11. NOD32升级ID,免费ID升级网址
  12. UBT18:ubuntu安装阿里云盘
  13. PostgreSQL—适合金融的数据库
  14. 现场快递柜状态采集与控制系统
  15. 分布式链路追踪在字节跳动的实践
  16. 造轮子--MLP与EBP的实现
  17. 拉姆表达式 语句组成
  18. 7.2 一次产品异常复位引发的质量提升经历
  19. cdr mac majave os_苹果最新 macOS Mojave 10.14 正式版 懒人镜像
  20. 怎么清理c盘只留下系统文件?

热门文章

  1. MySQL的查询缓存
  2. 【华科考研机试题】二叉树遍历(递归版 详细注释)
  3. 记录0.7.1版本的seata批量保存会报错的情况
  4. 滑动窗口最大值—leetcode239
  5. mvc4 ajax url参数,MVC4.0中Ajax通过a标签向后台Action传递参数问题?
  6. 网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化...
  7. IDA 7.5 Demo 包含 Windows、Linux、macOS
  8. 启动ucosii之OSInit()
  9. 数组名和指针(这里为指向数组首元素的指针)区别?
  10. Sorry, user *** is not allowed to execute ‘xxxx‘ as root on ****.