欢迎来到天天文库
浏览记录
ID:38552345
大小:1.27 MB
页数:40页
时间:2019-06-14
《程序员的数据库性能优化x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序员的数据库性能优化引言为一个程序员,我们也许不清楚线上正式的服务器硬件配置,我们不可能像DBA那样专业的对数据库进行各种实践测试与总结,但我们都应该非常了解我们SQL的业务逻辑,我们清楚SQL中访问表及字段的数据情况,我们其实只关心我们的SQL是否能尽快返回结果。那程序员如何利用已知的知识进行数据库优化?如何能快速定位SQL性能问题并找到正确的优化方向?本文总结了一些面向程序员的基本优化法则,将结合实例来坦述数据库开发的优化知识数据库访问优化法则简介1Oracle数据库2个基本概念2数据库访问优化法则详解34我的优化案例5SQL优化小窍门快速定位能性的瓶颈
2、点各种硬件的主要工作内容管理性能根据数据库知识,我们可以列出每种硬件主要的工作内容:CPU及内存:缓存数据访问、比较、排序、事务检测、SQL解析、函数或逻辑运算;网络:结果数据传输、SQL请求、远程数据库访问(dblink);硬盘:数据访问、数据写入、日志记录、大数据量排序、大表连接。数据库访问优化漏斗法则数据库访问优化法则简介1Oracle数据库2个基本概念2数据库访问优化法则详解34我的优化案例5SQL优化小窍门数据块(Block)数据块是数据库中数据在磁盘中存储的最小单位,也是一次IO访问的最小单位,一个数据块通常可以存储多条记录,数据块大小是DBA在创
3、建数据库或表空间时指定,可指定为2K、4K、8K、16K或32K字节。下图是一个Oracle数据库典型的物理结构,一个数据库可以包括多个数据文件,一个数据文件内又包含多个数据块。ROWIDROWID是每条记录在数据库中的唯一标识,通过ROWID可以直接定位记录到对应的文件号及数据块位置。ROWID内容包括文件号、对像号、数据块号、记录槽号,如下图所示。数据库访问优化法则简介1Oracle数据库2个基本概念2数据库访问优化法则详解34我的优化案例5SQL优化小窍门减少数据访问返回更少数据减少交互次数减少数据库服务器CPU运算创建并使用正确的索引数据库索引的原理比
4、较简单,但在复杂的表中真正能正确使用索引的人很少,即使是专业的DBA也不一定能完全做到最优。索引会大大增加表记录的DML(INSERT,UPDATE,DELETE)开销,正确的索引可以让性能提升100,1000倍以上,不合理的索引也可能会让性能下降100倍,因此在一个表中创建什么样的索引需要平衡各种业务需求。索引常见问题:索引有哪些种类?常见的索引有B-TREE索引、位图索引、全文索引,位图索引一般用于数据仓库应用,全文索引由于使用较少,这里不深入介绍。B-TREE索引包括很多扩展类型,如组合索引、反向索引、函数索引等等,以下是B-TREE索引的简单介绍B-T
5、REE索引也称为平衡树索引(BalanceTree),它是一种按字段排好序的树形目录结构,主要用于提升查询性能和唯一约束支持。B-TREE索引的内容包括根节点、分支节点、叶子节点。叶子节点内容:索引字段内容+表记录ROWID根节点,分支节点内容:当一个数据块中不能放下所有索引字段数据时,就会形成树形的根节点或分支节点,根节点与分支节点保存了索引树的顺序及各层级间的引用关系。一个普通的BTREE索引结构示意图如下所示:SQL什么条件会使用索引?当字段上建有索引时,通常以下情况会使用索引:INDEX_COLUMN=?INDEX_COLUMN>?INDEX_COLU
6、MN>=?INDEX_COLUMN
7、
8、'%'(后导模糊查询)T1.INDEX_COLUMN=T2.COLUMN1(两个表通过索引字段关联)INDEX_COLUMN<>?INDEX_COLUMNnotin(?,?,...,?)不等于操作不能使用索引function(INDEX_COLUMN)=?INDEX_COLUMN+1=?INDEX_COLUMN
9、
10、'a'=?经过普通运算或函数运算后的索引
11、字段不能使用索引INDEX_COLUMNlike'%'
12、
13、?INDEX_COLUMNlike'%'
14、
15、?
16、
17、'%'含前导模糊查询的Like语法不能使用索引INDEX_COLUMNisnullB-TREE索引里不保存字段为NULL值记录,因此ISNULL不能使用索引NUMBER_INDEX_COLUMN='123'CHAR_INDEX_COLUMN=123Oracle在做数值比较时需要将两边的数据转换成同一种数据类型,如果两边数据类型不同时会对字段值隐式转换,相当于加了一层函数处理,所以不能使用索引。a.INDEX_COLUMN=a.COLUMN_1给索引查询
18、的值应是已知数据,不能是未知字段值。S
此文档下载收益归作者所有