浏览 2220 次
锁定老帖子 主题:数据库性能分析、优化入门
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-14
最后修改:2010-11-14
最近参加了公司一位DBA关于数据库性能的分析,觉得讲得挺不错的,因此做下总结,也算是一种积累。
这个博文整体结构分为三个部分: 第一部分,阐述数据库的数据存储结构; 第二部分,SQL性能分析(核心部分); 第三部分,SQL调优实例。
1 数据库的数据存储结构
页面(BLOCK) 表 索引
2 SQL性能分析(核心部分) 重中之重:一条sql是否ok?如何优化?走索引是否可以提高性能?全在于下面一句话: 为什么是这样的呢?原因是读页面是大量的IO操作,需要在内存中定位,或是外存中定位并加载,开销很大。而其他的SQL比较操作,>,=,like…,都是CPU计算,相对开销较小。
下面分别对几类常见SQL访问需要读取的页面(BLOCK)进行分析: 表全扫描
丛上面的分析可知,索引唯一扫描是最快的,也就是我们平常从某张表中根据唯一的ID查询一个唯一记录的SQL;表全扫描是最慢的,也就是需要遍历表中所有的记录。
3 SQL调优实例 这里先说一下,不是每个SQL需要优化的,如果SQL性能满足需求,是不需要做优化的。 出了性能问题的的SQL: SELECT * FROM (select rid FROM (select r.rid, rownum rnum FROM (select rowid rid FROM CREDIT_REMARK t WHERE t.POSTER_MEMBER_ID = :1 and t.POSTER_ROLE = #memberRole# ORDER BY t.GMT_REMARK_MODIFIED DESC, t.ID DESC) r WHERE rownum <= #endRow :INTEGER#) WHERE rnum > #startRow :INTEGER#) t1, CREDIT_REMARK t2 WHERE t1.rid = t2.rowid ORDER BY t2.GMT_REMARK_MODIFIED DESC, t2.ID DESC;
解决方案:
建索引: (POSTER_MEMBER_ID, POSTER_ROLE,STATUS, GMT_REMARK_MODIFIED DESC, ID DESC),从普通表中完成分页转为索引内完成分页,减少回表需要读取的页面。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-18
学习了,感觉对入门还是有用的,特别对于我这样的非科班出身
|
|
返回顶楼 | |
发表时间:2011-01-05
只能观其大略,跟勒沙特列原理一样
|
|
返回顶楼 | |