SQl优化34条[参考].pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
SQL优化34条 本文将详细介绍SQL优化的34条经验,旨在帮助读者写出性能优良的SQL语句。 (1)选择最有效率的表名顺序 在 FROM 子句中,ORACLE 的解析器按照从右到左的顺序处理表名。因此,在包含多个表的连接查询中,选择记录条数最少的表作为基础表。如果有 3 个以上的表连接查询,那就需要选择交叉表作为基础表。 (2)WHERE 子句中的连接顺序 ORACLE 采用自下而上的顺序解析 WHERE 子句,因此表之间的连接必须写在其他 WHERE 条件之前。那些可以过滤掉最大数量记录的条件必须写在 WHERE 子句的末尾。 (3)SELECT 子句中避免使用‘*’ ORACLE 在解析的过程中,会将 '*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的。这意味着将耗费更多的时间。 (4)减少访问数据库的次数 ORACLE 在内部执行了许多工作:解析 SQL 语句,估算索引的利用率,绑定变量,读数据块等。因此,减少访问数据库的次数可以提高性能。 (5)在 SQL*Plus ,SQL*Forms 和 Pro*C 中重新设置 ARRAYSIZE 参数 可以增加每次数据库访问的检索数据量,建议值为 200。 (6)使用 DECODE 函数来减少处理时间 使用 DECODE 函数可以避免重复扫描相同记录或重复连接相同的表。 (7)整合简单 , 无关联的数据库访问 如果您有几个简单的数据库查询语句,可以把它们整合到一个查询中(即使它们之间没有关系)。 (8)删除重复记录 最高效的删除重复记录方法(因为使用了 ROWID)。例如:DELETE FROM EMP WHERE E.ROWID> (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO= E.EMP_NO); (9)用 TRUNCATE 替代 DELETE 当删除表中的记录时,在通常情况下,回滚段 (rollbacksegments) 用于存放可以被恢复的信息。如果您没有 COMMIT 事务,ORACLE 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。 (10) 尽量多使用 COMMIT 只要有可能,在程序中尽量多使用 COMMIT,这样程序的性能得到提高,需求也会因为 COMMIT 所释放的资源而减少。 (11)用 Where 子句替换 HAVING 子句 避免使用 HAVING 子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤。这个处理需要排序、总计等操作。如果能通过 WHERE 子句限制记录的数目,那就能减少这方面的开销。 (12)减少对表的查询 在含有子查询的 SQL 语句中,要特别注意减少对表的查询。例如:SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER)= (SELECT TAB_NAME,DB_VER FROM TABLES); 这些经验都是我们在编写 SQL 语句时需要注意的重要问题。遵循这些经验,可以大大提高 SQL 语句的性能和效率。
- 粉丝: 2
- 资源: 12万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助