3 1 NESTED LOOPS (Cost=5 Card=30 Bytes=1140) 4 3 TABLE ACCESS (FULL) OF 'C' (Cost=1 Card=4 Bytes=16) 5 3 TABLE ACCESS (FULL) OF 'A' (Cost=1 Card=30 Bytes=1020)
从上面的这些例子我们可以看出:通过给语句添加HINTS,让其按照我们的意愿执行,有时是一件很困难的事情,需要不断的尝试各种不同的hints。对于USE_NL与USE_HASH提示,建议同ORDERED提示一起使用,否则不容易指定那个表为驱动表。
环境:oracle 817 + linux + 阵列柜 swd_billdetail 表5000万条数据 SUPER_USER 表2800条数据 连接列上都有索引,而且super_user中的一条对应于swd_billdetail表中的很多条记录 表与索引都做了分析。
实际应用的查询为: select a.CHANNEL, B.user_class from swd_billdetail B, SUPER_USER A where A.cn = B.cn;
这样在分析时导致查询出的数据过多,不方便,所以用count(a.CHANNELB.user_class)来代替,而且count(a.CHANNELB.user_class)操作本身并不占用过多的时间,所以可以接受此种替代。
利用索引查询出SWD_BILLDETAIL表中所有记录的方法 SQL> select count(id) from SWD_BILLDETAIL; COUNT(ID) ---------- 53923574 Elapsed: 00:02:166.00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=18051 Card=1) 1 0 SORT (AGGREGATE) 2 1 INDEX (FAST FULL SCAN) OF 'SYS_C001851' (UNIQUE) (Cost=18051 Card=54863946)
Statistics ---------------------------------------------------------- 0 recursive calls 1952 db block gets 158776 consistent gets 158779 physical reads 1004 redo size 295 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client
上一篇:通过分析SQL语句的执行计划优化SQL(三)
下一篇:数据库Oracle9i的企业管理器介绍
|