WEB开发网
开发学院数据库Oracle SQL语句性能调整 阅读

SQL语句性能调整

 2007-05-06 12:05:38 来源:WEB开发网   
核心提示: 二、 SQL语句排序优化1. 排序发生的情况:SQL中包含group by 子句SQL 中包含order by 子句SQL 中包含 distinct 子句SQL 中包含 minus 或 union操作创建索引时2. 排序在内存还是在磁盘中进行?在内存执行的排序速度要比在磁盘执行的排序速度快

二、 SQL语句排序优化

1. 排序发生的情况:

SQL中包含group by 子句

SQL 中包含order by 子句

SQL 中包含 distinct 子句

SQL 中包含 minus 或 union操作

创建索引时

2. 排序在内存还是在磁盘中进行?

在内存执行的排序速度要比在磁盘执行的排序速度快14000倍。如果是专用连接,排序内存根据INIT.ORA的sort_area_size进行分配,如果是多线程服务连接,排序内存根据large_pool_size进行分配。

sort_area_size的增大可以减少磁盘排序,但是过大将使ORACLE性能降低,因为所用的连接回话都会分配到一个sort_area_size大小的内存,所以,为了提高有限的查询速度,可能会浪费大量的内存。增加sort_multiblock_read_count的值使每次读取更多的内容,减少运行次数,提高性能。

三、SQL子查询的调整

1、理解关联子查询和非关联子查询。

下面是一个非关联子查询:

select staff_name from staff_member where staff_id

in (select staff_id from staff_func);

而下面是一个关联子查询:

select staff_name from staff_member where staff_id in (select staff_id from staff_func where staff_member.staff_id=staff_func.staff_id);

以上返回的结果集是相同的,可是它们的执行开销是不同的:

非关联查询的开销——非关联查询时子查询只会执行一次,而且结果是排序好的,并保存在一个ORACLE的临时段中,其中的每一个记录在返回时都会被父查询所引用。在子查询返回大量的记录的情况下,将这些结果集排序,以及将临时数据段进行排序会增加大量的系统开销。

关联查询的开销——对返回到父查询的的记录来说,子查询会每行执行一次。因此,我们必须保证任何可能的时候子查询用到索引。

上一页  1 2 3 4 5  下一页

Tags:SQL 语句 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接