文章分类 -  Oracle

摘要:哪些情况下不好优化,例如总是读取全部或大多数数据。如果是因为数据分布不好,或者查询条件没有用到索引(因为不可能对每个字段加索引),建议改变一下表结构,例如加入冗余字段等方法。如果可以SQL语句是用于分页显示,可以用ROWNUM只读取部分数据来提高速度。如果是统计,可以利用MaterializedView保存查询结果,再从MV中读取数据,缺点是MV的数据不是最新的数据,当然也可以用缓存。在SELEC... 阅读全文
posted @ 2010-06-13 20:49 保尔二世 阅读(128) 评论(0) 推荐(0)
摘要:Oracle可以通过hint指定调整SQL的执行计划,当Oracle没有把SQL优化好的情况下,检查执行计划,找到性能差的部分,就可以加hint来尝试新的执行计划,比较后找到最优的执行计划,从而实现SQL的调优。方法主要有改变所使用的索引和表关联方式。索引hint的格式为 index(table_name index_name)表的关联方式常用的有:NestedLoop Join:在表关联时如果先... 阅读全文
posted @ 2010-06-13 20:47 保尔二世 阅读(666) 评论(0) 推荐(0)
摘要:解释计划我们可以非常直接地从一个SQL的执行时间来判断它的性能是否良好,但是却无法根据执行时间来优化它,因为SQL查询时所用到的数据和结果会被Oracle缓存。幸好有一些工具可以用于优化。Toad本身提供了一个功能,可以查看一个SQL语句估计的执行计划。遗憾地是它只能作为参考,因为它并不是真正的在Oracle里的执行计划,无法提供SQL语句真实和全面的数据读取情况,而且有时候与真正的执行计划相差很... 阅读全文
posted @ 2010-06-13 20:39 保尔二世 阅读(554) 评论(0) 推荐(0)
摘要:数据库的优化一般情况下,按照业务逻辑设计的数据库结构能够满足性能的需求,除非设计者没有足够的经验和技术。如果还存在性能问题,可以通过如下方式进行优化:加上必要的索引,例如经常查询的字段,外键字段或关联字段加一些冗余字段,有两种用法。一是可以对本表的数据进行细分,可以提高索引的性能,例如员工表中可以加入是否在职字段,和部门字段组成一个索引。二是避免对子表的读取,例如在员工表特别大的情况下可以在部门表... 阅读全文
posted @ 2010-06-13 20:38 保尔二世 阅读(227) 评论(0) 推荐(0)
摘要:表结构:--ALTER TABLE DEPT DROP PRIMARY KEY CASCADE;--DROP TABLE DEPT CASCADE CONSTRAINTS;CREATE TABLE DEPT( DEPT_ID INTEGER, DEPT_NAME VARCHAR2(50 BYTE));CREATE UNIQUE INDEX DEPT_PK ON DEPT(DEPT_ID);ALTE... 阅读全文
posted @ 2010-06-13 20:36 保尔二世 阅读(153) 评论(0) 推荐(0)
摘要:数据的存储一般情况下,数据是以表的方式存储到数据库里,表的行越多,或者列越多,越会影响数据的读取速度。在插入数据的时候,数据是按操作顺序插入的,而不是按主键等值的顺序插入的。这是为了防止插入数据时做太多操作而影响性能,例如,当主键是一个字符串时,可能已经有上百万数据,后来有条数据要插入到最前面,不可能因此把上百万数据在数据库中移动位置。同样,在一行数据中,列数据也是顺序存储的,如果列太多,就会影响... 阅读全文
posted @ 2010-06-13 20:35 保尔二世 阅读(233) 评论(0) 推荐(0)
摘要:做了多年项目,碰到许多方面的性能问题,有需求方面的,有设计方面的,有代码方面的,有数据库方面的,收获颇多,但没有彻底整理,感觉很遗憾。现在做了纯粹一个Oralce项目,决定不再遗憾,因此有这系列文章的诞生。与数据库相关的系统中,性能瓶颈和难点一般都集中在SQL语句上——特别是一些查询统计的SQL语句上,因此在性能优化中,SQL的优化是非常重要的一块。SQL优化的原则可以用最... 阅读全文
posted @ 2010-06-06 19:20 保尔二世 阅读(153) 评论(0) 推荐(0)