数据库优化方法及思路分析

目录

1 sql层面的优化

2 数据库内存及其他非sql优化

3 后台代码优化

4 借助数据库的存储过程和函数及视图进行优化

我们平时开发时,数据库是必不可少的组件。如果是数据量大的应用,我们势必要进行数据库的优化。下面我来分析应该从哪些方面入手(如果有更好的建议,请留言)。

1 sql层面的优化

通过添加索引,sql的分析等进行优化数据库性能;详细优化流程请看:数据库优化及SQL优化详解大全_傻鱼爱编程的博客-CSDN博客_数据库调优和sql调优

2 数据库内存及其他非sql优化

我们可以从缓存和并发参数等方面入手,进行性能优化。详细优化流程请看:

mysql数据库优化之数据库非sql优化_傻鱼爱编程的博客-CSDN博客

3 后台代码优化

这个是初级程序员最容易出现的问题,为了方便写代码处理数据,在代码循环(for)中进行数据库的增删改查操作,从来不想着可以批量操作数据库;这样就会导致处理数据效率低下。

最近一个同事出现for循环操作数据库的情况,一个接口竟然用了7s,他说他写的已经最优了,一个循环里面大概有4个操作数据库的方法。我给他看了一下,我说你这是for循环操作数据库引起的(不在循环里操作数据库已经是普遍的认知,他竟然不知道)。他竟然不信,我给他修改了其中一条sql,在循环外面进行批量查询数据库,然后按条件匹配相应的数据。经过打印运行时间,改了这一条sql程序快了2s,他这才相信问题出在这里。

我们要明白一点,数据库的执行流程是什么样的,哪些步骤是最耗时的。后端开发操作数据库经过的大致流程:连接数据库-->查询数据库缓存(没有缓存就跳过)-->sql分析器-->sql优化器-->查询数据库。最耗时的是数据库连接,其次是sql分析耗时。

展示下我的测试结果:

1. 循环查询1000次,所用的时间:23521ms

2. 循环查询10次,所用的时间:201ms

3. 循环查询1次,所用的时间:21ms

4. 集合1000个条件批量查询1次,所用的时间:245ms

5. 集合10000个条件批量查询1次,所用的时间:523ms

经过测试数据发现,其实操作数据库的连接是非常耗时的。所以不要在循环中操作数据库。

4 借助数据库的存储过程和函数及视图进行优化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 引起数据库性能问题的因素 1 1.1 软件设计对数据库的影响 1 1.1.1 软件架构设计对数据库性能的影响 1 1.1.2 软件代码的编写对数据库性能的影响 2 1.2 数据库的设计 8 1.2.1 oltp数据库 9 1.2.2 olap数据库 10 1.3 数据库的硬件设计 14 1.3.1 存储容量 15 1.3.2 存储的物理设计 16 1.3.3 数据的安全 17 1.4 小结 19 第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池latch争用 54 3.2.1 表数据块 54 3.2.2 索引数据块 59 3.2.3 索引根数据块 62 3.2.4 段头数据块 65 第4章 优化器 66 4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 6.1.2 rule hint 117 6.2 访问路径相关的hint 117 6.2.1 full hint 118 6.2.2 index hint 118 6.2.3 no_index hint 118 6.2.4 index_desc hint 119 6.2.5 index_combine hint 119 6.2.6 index_ffs 119 6.2.7 index_join 120 6.2.8 index_ss hint 120 6.3 表关联顺序的hint 125 6.3.1 leading hint 125 6.3.2 ordered hint 126 6.4 表关联操作的hint 127 6.4.1 use_hash,use_nl和use_merge hint 127 6.4.2 no_use_hash hint 132 6.4.3 no_use_merge hint 133 6.4.4 no_use_nl hint 133 6.5 并行执行相关的hint 134 6.5.1 parallel hint 134 6.5.2 no_parallel hint 134 6.6 其他方面的一些hint 135 6.6.1 append hint 135 6.6.2 dynamic_sampling hint 135 6.6.3 driving_site hint 136 6.6.4 cache hint 136 6.7 小结 136 第7章 分析及动态采样 138 7.1 直方图 141 7.2 dbms_stats包 147 7.3 动态采样 176 7.3.1 什么是动态采样 176 7.3.2 动态采样的级别 182 7.3.3 什么时候使用动态采样? 185 7.4 小结 185 第8章 并行执行 186 8.1 并行和olap系统 187 8.2 并行处理的机制 189 8.3 读懂一个并行处理的执行计划 191 8.4 一个很常见的并行执行等待事件 192 8.5 并行执行的适用范围 194 8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的设定 210 8.6.1 并行相关的初始化参数 210 8.6.2 并行度的设定 211 8.7 直接加载 213 8.7.1 直接加载和redo 216 8.7.2 直接加载和索引 219 8.7.3 直接加载和并行 221 8.7.4 直接加载和sql*loader 226 第9章 变量绑定 232 9.1 什么是变量绑定,为什么要做变量绑定 232 9.2 为什么说oltp必须要求变量绑定而olap不应该绑定变量 241 9.3 bind peaking 248 第10章 sql_trace和10046事件 254 10.1 sql_trace 254 10.2 tkprof工具 256 10.3 10046事件 268 第11章 10053事件 276 第12章 性能视图和性能参数 294 12.1 性能视图 294 12.1.1 v$sql 295 12.1.2 v$sql_shared_cursor 300 12.1.3 v$session 305 12.1.4 v$sessstat 309 12.1.5 v$session_wait 310 12.2 性能参数 312 12.2.1 cursor_sharing 313 12.2.2 db_file_multiblock_read_count 328 12.2.3 pga_aggregate_target和sga_target 334 12.2.4 optimizer_dynamic_sampling 334 第13章 性能报告 335 13.1 awr性能报告 335 13.1.1 生成awr性能报告 337 13.1.2 awr性能报告分析 342 13.2 statspack性能报告 386 13.2.1 statspack的安装 386 13.2.2 statspack性能采集 391 13.3 ash性能报告 394 13.3.1 生成ash性能报告 395 13.3.2 ash性能报告分析 405 13.4 小结 416 附录a 常见的等待事件 417 后记 关于数据库的学习方法 434

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值