pak*_*ick 3 sql oracle performance sql-optimization
我正在尝试将提示应用于我的查询,但解释计划不会更改为正在使用的提示.
我的查询
select/*+ USE_HASH(master_flight)*/ bid, b.fno, seat, flight_date from
master_booking b, master_flight f where b.fno = f.fno and rownum <
120000
Run Code Online (Sandbox Code Playgroud)
解释计划
119999 COUNT STOPKEY (cr=11336 pr=446 pw=0 time=240292 us)
119999 NESTED LOOPS (cr=11336 pr=446 pw=0 time=120236 us)
800 TABLE ACCESS FULL ASS2MASTER_FLIGHT (cr=936 pr=441 pw=0 time=22455 us)
119999 TABLE ACCESS CLUSTER ASS2MASTER_BOOKING (cr=10400 pr=5 pw=0 time=6858 us)
800 INDEX UNIQUE SCAN FNO_INDEX (cr=1600 pr=5 pw=0 time=4717 us)(object id 332468)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在强制集群使用散列连接而不是嵌套循环.但是解释计划仍然表明它正在使用嵌套循环.
通常,如果您使用提示,则需要引用别名,而不是表名.USE_HASH需要两个表名.所以你需要类似的东西
SELECT /*+ use_hash(b f) */
bid, b.fno, seat, flight_date
FROM master_booking b,
master_flight f
WHERE b.fno = f.fno
AND rownum < 120000
Run Code Online (Sandbox Code Playgroud)
当然,如果您发现自己需要提示查询,通常意味着您的统计信息不正确.而且你通常最好修复你对统计数据的任何问题,以便优化器自己选择更有效的计划.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |