您的位置:首页 > 数据库

排序优化

2012-08-15 13:45 323 查看
避免索引:

.创建索引时使用NOSORT子句(在一个单CPU的机器中使用SQL*Loader时,可以在建索引时使用NOSORT子句,这样可以避免对数据进行预先排序。这个子句只对数据插入到表时有效):

SQL> create index EMPLOYEES_DEPARTMENT_ID_FK on employees(department_id) NOSORT;

ORA-01409: NOSORT option may not be used; rows are not in ascending order

在一个多CPU的机器中,并行加载数据可能更快,即使加载的数据不整齐。然后能够 使用并行索引创建来提高排序。

.使用UNION ALL代替UNION(使用UNION ALL代替UNION;这个子句不能消除重复,所以 不需要排序)

.Nested Loop Joins(嵌套的循环连接)

使用索引访问对于对等连接请求:

SQL> select department_name, Last_name

from employees e, departments d

where e.department_id = d.department_id;

最优化选择一个嵌套的循环连接代替一个合并排序连接。一个嵌套的循环连接不请求任何的排序。这步需要做下面的操作:

1、在employees表上执行一个全表扫描

2、对于返回的每一行使用DEPARTMENT_ID的值去执行一个唯一扫描在主键索引(departments表的主键)上

3、使用从索引扫描获得的ROWID去定位在departments表中匹配的行

4、把从employees表返回的行跟从departments表中返回的匹配的行合并

.在经常被ORDER BY子句引用的列上建索引(既然索引已经经过升序排序并且是双向链接,服务器使用索引好于一个排序操作。)

.对列进行分析(只对感兴趣的列收集统计;比如,那些相关的的连接条件,

ANALYZE... FOR COLUMNS 或者 ANALYZE...FOR ALL INDEXED COLUMNS.

注意:ANALYZE... SIZE n命令为相关的列建立柱状图。用FOR ALL INDEXED COLUMNS这个子句进行综合,对于主键和唯一键约束来说,可以避免产生不必 要的柱状图)

.ANALYZE ESTIMATE(COMPUTE子句对于最优化来说更精确。但是,它需要一个大的排 序空间。ESTIMATE子句对于大的表和簇表来说更好)

转载【ocp认证
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql ocp